4

我正在尝试使用 fstream 部分截断(或缩短)现有文件。我试过写一个 EOF 字符,但这似乎无济于事。

任何帮助,将不胜感激...

4

4 回答 4

3

我不认为你可以。HANDLE<->int<->FILE *至少在 Windows 上,有许多函数可以“上下”移动 的包装层次结构,但是没有“适当的”方法可以FILE *从 iostreams 对象中提取 (如果它确实是用一个实现的话)。

您可能会发现这个问题会有所帮助。

就我个人而言,我强烈建议不要使用 iostream,它们设计得很糟糕,大量使用 C++,而且看起来很讨厌。看看Boost 的 iostreams ,或者如果你需要使用类,可以包装stdio.h 。

stdio 的相关函数是ftruncate()

于 2010-02-14T16:14:26.970 回答
1

Boost.Interprocess库定义了一个可移植truncate函数。出于某种原因,它没有记录在案,但你可以在这个头文件中找到它。

于 2010-02-14T16:54:15.970 回答
0

这将取决于操作系统。大多数操作系统都支持这一点,但方式不同。在 Windows 上,有一个SetEndOfFile(). 在 Unix 和类似的系统上,你lseek到你想要文件结束的地方,并在lwrite那里做一个零字节。其他操作系统无疑使用其他方法。

于 2010-02-14T16:11:08.740 回答
0

最后我咬紧牙关,读取文件中要保存到数组中的部分,然后重新编写它。这不是最好的解决方案 - 但由于文件总是很小,我决定接受这种方法。

于 2010-02-14T22:08:14.683 回答