我正在尝试使用 fstream 部分截断(或缩短)现有文件。我试过写一个 EOF 字符,但这似乎无济于事。
任何帮助,将不胜感激...
我不认为你可以。HANDLE<->int<->FILE *
至少在 Windows 上,有许多函数可以“上下”移动 的包装层次结构,但是没有“适当的”方法可以FILE *
从 iostreams 对象中提取 (如果它确实是用一个实现的话)。
您可能会发现这个问题会有所帮助。
就我个人而言,我强烈建议不要使用 iostream,它们设计得很糟糕,大量使用 C++,而且看起来很讨厌。看看Boost 的 iostreams ,或者如果你需要使用类,可以包装stdio.h 。
stdio 的相关函数是ftruncate()。
Boost.Interprocess库定义了一个可移植truncate
函数。出于某种原因,它没有记录在案,但你可以在这个头文件中找到它。
这将取决于操作系统。大多数操作系统都支持这一点,但方式不同。在 Windows 上,有一个SetEndOfFile()
. 在 Unix 和类似的系统上,你lseek
到你想要文件结束的地方,并在lwrite
那里做一个零字节。其他操作系统无疑使用其他方法。
最后我咬紧牙关,读取文件中要保存到数组中的部分,然后重新编写它。这不是最好的解决方案 - 但由于文件总是很小,我决定接受这种方法。