在文件打开后设置二进制模式

4
我的职能
void myFunction (FILE *f);

获取已经打开的文件。我需要写入一个字面值为CR+LF,所以我想将f的模式设置为二进制。

我该如何做到这一点?


你没有指定操作系统,但也许 setmode(或 _setmode)是一个可能的选择? - Roger Rowland
4
在Windows上,如果以文本模式打开文件,你会得到\r\r\n这样的结果。 - Corbin
1
@H2CO3 大部分情况下它是符合标准的,但他们有一个有趣的习惯,即废弃标准函数并使用自己的函数。这非常令人恼火。如果以二进制模式打开,它将逐字节写入。只是 Windows 偏爱文本模式 :/。 \r\n 似乎一直是最糟糕的决定之一,但是,嗯,现在我们无能为力。如果你被困在 Windows 上,那就只能忍受了。 - Corbin
1
@Corbin 当然,对于有些人来说,这不是选择,而是义务。老实说,我为他们感到难过。 - user529758
@angus MSDN链接到_setmode 适用于Windows。在Windows上,POSIX等效的setmode已被弃用(请参阅@Corbin的评论)。 - Roger Rowland
显示剩余9条评论
1个回答

2
根据评论,也许以下函数可能有用(未经测试!):
#include <stdio.h>

#ifdef WIN32
#include <fcntl.h>
#include <io.h>
#endif

int SetBinary(FILE *pFile)
{
    // set file mode to binary
#ifdef WIN32
    return _setmode(_fileno(pFile), O_BINARY);
#else
    return setmode(_fileno(pFile), O_BINARY);
#endif
}

看起来很丑,因此您可能需要有条件地#define函数名称,但我认为它永远不会变得漂亮。


我的系统中不存在 setmode_fileno,但它们也不需要,因为这不是 Windows(AFAIUI)。所以,你可能应该删除你的 #ifdef 中的 #else 部分。 - angus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接