Ввод файла не возвращается - PullRequest
0 голосов
/ 23 апреля 2011

Извиняюсь, что задаю такой простой вопрос, но я действительно не понимаю, почему In3 не очень хорош. Полагаю, здесь есть нечто фундаментальное, чего я не знаю

Заранее спасибо

содержимое файла "testIn1.txt": а б в а

Я использую MS Visual C ++ 2010 Express.

#include <fstream>
#include <iostream>
using namespace std;

int main() {

    ifstream In3;
    ofstream Out3;
    In3.open("testIn1.txt", fstream::in);
    Out3.open("testOut1.txt", fstream::app);
    cout << "Is In3 Good? " << In3.good() << endl;
    cout << "Is OUt3 Good? " << Out3.good() << endl;    
    In3.close();
    Out3.close();
}

Ответы [ 2 ]

2 голосов
/ 23 апреля 2011

Работает для меня (используя MinGW g ++ в качестве компилятора):

C:\>echo a b c a > testIn1.txt

C:\>g++ test.cpp -otest.exe

C:\>test
Is In3 Good? 1
Is OUt3 Good? 1

Обратите внимание, что testIn1.txt должен находиться в том же каталоге, что и исполняемый файл, или вы должны указать программе путь к файлу.Вы можете проверить, что находитесь в правильном каталоге, если testOut1.txt создан после запуска программы (и, конечно, не был там раньше).

Некоторые другие вещи, которые приходят мне в голову:

  • Входной файл заблокирован (как предложил Эмиль).Перезагрузка может помочь, вы также можете использовать такие инструменты, как WhoLockMe , чтобы изучить это дальше.Кроме того, удаление или воссоздание testIn1.txt должно привести к ошибке в этом случае.
  • AFAIK, MSVC использует папки отладки / выпуска.В зависимости от установленной конфигурации вы можете запустить более старую версию программы, что может привести к путанице.Убедитесь, что вы находитесь в нужной папке, возможно, удалите старые двоичные файлы и файлы testIn / testOut и обязательно проверьте временные метки.

Чтобы получить каталог, в котором работает ваш файл, попробуйте этот код ( source ):

#include <unistd.h>
char *path=(char*)malloc(1024*sizeof(char));
size_t size;
path=getcwd(path,size);
cout<<"current Path: "<<path<<endl;
free(path);

Обратите внимание, что компиляторы MS могут жаловаться на getcwd и / или unistd.h, попробуйте _getcwd в этом случае.

1 голос
/ 23 апреля 2011

Я протестировал вашу программу в Windows и Linux.

Дело 1

Либо файл не существует в Windows и Linux, либо

Дело 2

В Windows, если файл существует, проблем не должно быть, в Linux, если Name of File не введен в правильном Case/Caps, он может не открыться.

Функция good() возвращает true, если ни один из флагов ошибок потока (eofbit, failbit and badbit) не установлен.

Попробуйте добавить это утверждение и посмотреть, что вы получите:

cout << "Fail " << In3.fail() << endl;

...