C++: Каждый раз я читал в fstream, я получил 1 дополнительный символ в конце

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

Править:

ifstream readfile(inputFile);
ofstream writefile(outputFile);
char c;
while(!readfile.eof()){
      readfile >> c;
      //c = shiftChar(c, RIGHT, shift);
      writefile << c;
}
readfile.close();
writefile.close();
9
задан Thang Pham 6 May 2010 в 19:28
поделиться

2 ответа

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

while (infile>>variable) ...

или:

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

но НЕ:

while (infile.good()) ...

или:

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

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

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

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

// do the copy:
writefile << readfile.rdbuf();
8
ответ дан 4 December 2019 в 22:27
поделиться

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

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

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;
0
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: