我目前正在尝试将文件内容读入char数组。
例如,我在char数组中有以下文本。 42个字节:
{
type: "Backup",
name: "BackupJob"
}
此文件是在Windows中创建的,我使用的是Visual Studio c ++,因此没有操作系统兼容性问题。
然而,执行以下代码,在for循环完成时,我得到Index:39,在10之前没有显示13。
// Create the file stream and open the file for reading
ifstream fs;
fs.open("task.txt", ifstream::in);
int index = 0;
int ch = fs.get();
while (fs.good()) {
cout << ch << endl;
ch = fs.get();
index++;
}
cout << "----------------------------";
cout << "Index: " << index << endl;
return;
但是,当尝试创建一个char数组时,文件的长度,按照下面的方式读取文件大小会导致3个额外的CR字符归因于总文件大小,因此length
等于42,这是用狡猾的字节添加拧紧数组的末尾。
// Create the file stream and open the file for reading
ifstream fs;
fs.seekg(0, std::ios::end);
length = fs.tellg();
fs.seekg(0, std::ios::beg);
// Create the buffer to read the file
char* buffer = new char[length];
fs.read(buffer, length);
buffer[length] = '\0';
// Close the stream
fs.close();
使用十六进制查看器,我确认该文件确实包含文件中的CRLF(13 10)个字节。
获取文件的结尾以及get()和read()方法实际返回的内容似乎存在差异。
有人可以帮忙吗?
干杯, 贾斯汀
答案 0 :(得分:4)
您应该以二进制模式打开文件。这将停止读取CR。
fs.open("task.txt", ifstream::in|ifstream::binary);