【发布时间】:2014-01-18 18:43:19
【问题描述】:
我做过一些类似的事情:
FILE* a = fopen("a.txt", "w");
const char* data = "abc123";
fwrite(data, 6, 1, a);
fclose(a);
然后在生成的文本文件中,它像预期的那样显示“abc123”。但后来我做到了:
//this time it is "wb" not just "w"
FILE* a = fopen("a.txt", "wb");
const char* data = "abc123";
fwrite(data, 6, 1, a);
fclose(a);
并得到完全相同的结果。如果我使用二进制或普通模式读取文件,它也会给我相同的结果。所以我的问题是,使用或不使用二进制模式的 fopen 有什么区别。
我在哪里读到了 fopen 模式:http://www.cplusplus.com/reference/cstdio/fopen/
【问题讨论】:
-
尝试在 Windows 上以文本模式打开文件并在其中写入一堆换行符,然后尝试将其读回。
-
是的,我现在看到了副本。很抱歉之前没有注意到它
-
旁注:我注意到你用 C++ 标记了这个,而不是 C。我可以建议使用
std::ifstream和std::ofstream而不是 C 库吗?它更加地道,并确保您不必担心记住调用 close,无论是否抛出异常(除了提供其他不错的抽象之外)。 -
@Mark 我会调查的。
-
请注意,在我写这篇文章时,链接到副本的所选解决方案在某些细节上是不正确。