C ++: каждый раз, когда я читаю fstream, в конце я получаю 1 дополнительный символ - PullRequest
9 голосов
/ 06 мая 2010

Каждый раз, когда я читаю по fstream, в конце появляется 1 дополнительный символ. Как мне избежать этого?

EDIT:

ifstream readfile(inputFile);
ofstream writefile(outputFile);
char c;
while(!readfile.eof()){
      readfile >> c;
      //c = shiftChar(c, RIGHT, shift);
      writefile << c;
}
readfile.close();
writefile.close();

Ответы [ 2 ]

7 голосов
/ 06 мая 2010

Обычно это происходит из-за неправильного тестирования конца файла. Обычно вы хотите сделать что-то вроде:

while (infile>>variable) ...

или

while (std::getline(infile, whatever)) ...

но НЕ:

while (infile.good()) ...

или

while (!infile.eof()) ...

Редактировать: первые два выполняют чтение, проверяют, не было ли сбоя, и, если это так, выходят из цикла. Последние два пытаются прочитать, обработать то, что было «прочитано», а затем выйти из цикла на следующей итерации , если предыдущая попытка не удалась.

Edit2: чтобы легко скопировать один файл в другой, рассмотрите возможность использования чего-то вроде этого:

// open the files:
ifstream readfile(inputFile);
ofstream writefile(outputFile);

// do the copy:
writefile << readfile.rdbuf();
0 голосов
/ 06 мая 2010

Судя по коду, кажется, что вы пытаетесь скопировать содержимое одного файла в другой?

Если так, я бы попробовал что-то вроде этого:

ifstream fin(inputFile, ios::binary);

fin.seekg(0, ios::end);
long fileSize = fin.tellg();
fin.seekg(0, ios::beg);

char *pBuff = new char[fileSize];
fin.read(pBuff, fileSize);
fin.close();

ofstream fout(outputFile, ios::binary)
fout.write(pBuff, fileSize);
fout.close;
delete [] pBuff;
...