2

我目前正在尝试将文件的内容读入 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() 方法实际返回的内容。

有人可以帮忙吗?

干杯,贾斯汀

4

1 回答 1

4

您应该以二进制模式打开文件。这将停止读取删除 CR。

fs.open("task.txt", ifstream::in|ifstream::binary);
于 2013-03-26T11:52:30.340 回答