【发布时间】:2020-11-29 22:48:37
【问题描述】:
我编写了将整个文件读入缓冲区的简单函数。
#include <iostream>
#include <fstream>
int main()
{
std::ios_base::sync_with_stdio(0);
std::ifstream t;
t.open("C:\\Users\\sufal\\Desktop\\test.txt");
t.seekg(0, std::ios::end);
long length = t.tellg();
t.seekg(0, std::ios::beg);
std::cout << "file size: " << length << std::endl;
char* buffer = new char[length+1];
t.read(buffer, length);
t.close();
buffer[length] = 0;
std::cout << buffer << std::endl;
return 0;
}
这是 test.txt:
1
2
3
文件大小应为 5 个字节。为什么我的程序显示错误的文件大小? Windows 资源管理器似乎也显示错误的文件大小为 7 个字节。
【问题讨论】:
-
这并没有解决问题 l 而是养成使用有意义的值初始化对象的习惯,而不是默认初始化它们并立即覆盖默认值。在这种情况下,这意味着将
std::ifstream t; t.open("C:\\Users\\sufal\\Desktop\\test.txt”);更改为std::ifstream t("C:\\Users\\sufal\\Desktop\\test.txt");。此外,您不必致电t.close();。析构函数会这样做。