Чтение текстового файла с использованием относительного пути - PullRequest
0 голосов
/ 26 января 2012

Я хочу прочитать текстовый файл, используя относительный путь в C ++. Структура каталогов следующая: source -> Resources -> Settings -> Video.txt.

Содержимое файла ( примечание: конечно, они используются для тестирования):

somes*** = 1
mores*** = 2
evenmores*** = 3

Согласно моим исследованиям, это возможно. Тем не менее, я считаю, что это еще не сработало. Например, когда я перехожу через мой отладчик, моя переменная char *line, которая используется для получения построчного ввода текстового файла, всегда имеет постоянное значение 8. Насколько я понимаю, указатель char может действовать как динамический массив символов, которые вы можете переназначить.

Почему я не могу прочитать мой файл? Когда я пытаюсь сделать if ( !videoSettings ), он возвращает true, и я получаю сообщение об ошибке (созданное мной).

Код

#ifdef WIN32
    const char *filePath = "Resources\\Settings\\Video.txt";
#else
    const char *filePath = "Resources/Settings/Video.txt";
#endif

    std::ifstream videoSettings( filePath );

    if ( !videoSettings )
    {
        cout << "ERROR: Failed opening file " << filePath << ". Switching to configure mode." << endl;

        //return false;
    }

    int count = 0;

    char *line;

    while( !videoSettings.eof() )
    {
        videoSettings >> line;

        cout << "LOADING: " << *line << "; ";

        count = sizeof( line ) / sizeof( char );

        cout << "VALUE: " << line[ count - 1 ];

        /*

        for ( int i = count; i > count; --i )
        {
            if ( i == count - 4 )
            {

            }
        }

        */
    }

    delete line;

1 Ответ

2 голосов
/ 26 января 2012

Ничего себе - вы не можете прочитать текстовую строку в виде только символа *, вам нужно предварительно выделить память.

2-й размер указателя на символ * является постоянным - но размер данных, на которые он указывает, не

Я предлагаю использовать вызов getline std :: string и избегать динамического выделения памяти

Так что это будет

std::ifstream in("file.txt");
std::string line;
while(getline(in, line))
{
    std::cout << line << std::endl;
}

Наконец, относительные пути являются последними из ваших проблем в вашем примере кода: -)

...