【问题标题】:Ubuntu - issue with opening a .txt file from terminalUbuntu - 从终端打开 .txt 文件的问题
【发布时间】:2011-10-12 11:18:56
【问题描述】:

我已经构建了一个 .cpp 程序,以便将一些内容写入在 .cpp 文件中创建的 .txt 文件。

我设法编写了所需的内容,但是,当我尝试从终端打开创建的文件时,它说虽然它在那里但找不到它。

当我尝试使用vi 或nano 打开它时,它的内容是空的。这就像创建一个新文件。

但是,当我在终端外打开它时,我可以看到我想要的内容。

可能是什么问题,我该如何解决?

下面,我已经添加了代码。

问题在于system(buffer) 命令。我收到以下错误:sh: cannot open video2.txt: No such file。我试图从命令提示符打开文件,我得到了上述情况。

int main(int argc,char* argv[])
{

fstream RawStipFile;
RawStipFile.open(strcat(argv[1],".txt"));
string line;

if (RawStipFile.is_open())
{

    getline(RawStipFile, line);
    int i = 0;
    ofstream OutVideoStip;
    ofstream VideoList;
    VideoList.open("VideoList.txt");
    while ( RawStipFile.good() )
    {

        getline (RawStipFile,line);
        char* l;
        l = (char*) malloc(sizeof(char));
        l[0]=line[0];
        //cout<<line[0]<<endl;
        if (line[0]==35)
        {

            if (OutVideoStip.is_open())
            {
                OutVideoStip.close();
            }
            i++;
                        //char* base;
                        //base = (char*) malloc(1000*sizeof(char));
                        //sprintf(base, "%d", i);
            char* b;
            b = &line[1];
            VideoList<<b<<endl;
            OutVideoStip.open(strcat(b, ".txt"));


        }

        else
        {

            OutVideoStip << line << endl;

        }


    }

    OutVideoStip.close();
    RawStipFile.close();
    VideoList.close();
}

else
{
    cout << "Unable to open file \n";
}

fstream VideoNames;
VideoNames.open("VideoList.txt", fstream::in);

if (VideoNames.is_open())
{
    while ( VideoNames.good() )
    {
        getline(VideoNames, line);
        line=line.substr(1,line.length());
        if (line.compare(""))
        {
            string initial = "./txt2mat<";
            initial.append(line);
            initial.append(".txt>");
            initial.append(line);
            initial.append(".dat");
            cout<<initial<<endl;
            const  char* buffer;
            buffer = initial.c_str();
            system(buffer);
        }
    }
}
else
{
    cout<<"Unable to open file. \n";
}

VideoNames.close();

return 0;
}

【问题讨论】:

  • 显然出了点问题。但是没有看到你的代码,我们怎么知道呢?
  • 如果没有更多相关细节(演示您的问题的最小工作示例将是理想的,即我们可以编译和运行的简短但完整的东西),除了对问题进行疯狂猜测之外,不可能做更多的事情在这里。
  • 是什么让你认为文件在那里? ls 在那里显示吗?您在正确的目录中吗?你怎么在终端外面打开它?
  • 尝试在调用system() 之前执行cout &lt;&lt; buffer &lt;&lt; endl; 以查看您真正生成了什么命令。

标签: c++ ubuntu terminal file-not-found


【解决方案1】:

您以错误的方式使用strcat。我不知道这是否是您的问题的原因,但它可能会导致未定义的行为;

int main(int argc,char* argv[])
{
    fstream RawStipFile;
    RawStipFile.open(strcat(argv[1],".txt"));

在这里你修改argv[1]。您将 4 个字符附加到它,而不分配任何内存。

string line;
...
char* b;
b = &line[1];
VideoList<<b<<endl;
OutVideoStip.open(strcat(b, ".txt"));

string 负责自己的内存管理。你不能假设它已经为你保留了另外 4 个字节来追加。如果需要追加,请使用string 成员函数,而不是strcat。

【讨论】:

    【解决方案2】:

    只是一个松散的猜测:当前工作目录不一样?

    尝试先使用chdir 或通过绝对路径打开/home/simon/VideoList.txt

    【讨论】:

      猜你喜欢
      • 2023-01-03
      • 2012-11-21
      • 2014-12-02
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      相关资源
      最近更新 更多