Ubuntu - проблема с открытием .txt файла из терминала - PullRequest
0 голосов
/ 12 октября 2011

Я создал программу .cpp для записи некоторого содержимого в файл .txt, созданный в файле .cpp.

Мне удается написать нужный контент, однако, когда я пытаюсь открыть созданный файл из терминала, он говорит, что не может найти его, хотя он там есть.

Когда я пытаюсь открыть его с помощью 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;
}

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Вы используете 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"));

a string заботится о собственном управлении памятью. Вы не можете предположить, что он зарезервировал еще 4 байта для добавления. Если вам нужно добавить, используйте string функции-члены, а не strcat.

0 голосов
/ 12 октября 2011

просто ошибочное предположение: текущий рабочий каталог не совпадает?

Попробуйте либо сначала использовать chdir, либо открыть по абсолютному пути /home/simon/VideoList.txt

...