在windows下的mingw中读取不会读取整个文件.为什么



在windows下使用mingw,在linux下工作的以下代码不起作用:

int fh = open(filename, O_RDONLY);
const int size=100000;
int bytesRead = read(fh, buffer, size);

该文件大于100k,但读取的字节数仅为232。我认为这与windows中的二进制文件有关?

这段带有ifstream的代码将在windows和Linux中运行。

ifstream in(filename, ios::binary);
const int size=100000;
in.read(buffer, size);

有没有办法让2级IO调用也能在windows上工作?

阅读手册是非常有用的技巧。

_读取

返回值

_read返回读取的字节数,如果文件中剩余的字节数小于buffer_size,则可能小于buffer_size或者如果文件是以文本模式打开的。在文本模式中,每个回车换行符对\r\n都替换为一个换行字符。返回值中只计算单行换行符。替换不会影响文件指针。

文本和二进制模式文件I/O

文件I/O操作以文本或二进制两种转换模式之一进行,具体取决于打开文件的模式。数据文件通常以文本模式处理。

  • 使用函数_set_fmode更改新打开文件的默认模式。使用_get_fmode查找当前默认模式初始默认设置为文本模式(_O_text(

  • 通过在程序中设置全局变量_fmode,直接更改默认翻译模式。函数_set_fmode设置该变量的值,但也可以直接设置。

open(filename, O_RDONLY);默认情况下在Windows中以文本模式打开文件。

open(filename, O_RDONLY | O_BINARY);在Windows中以二进制模式打开文件,如果文件中还有足够的字节,read将读取所有请求的字节。

相关内容

  • 没有找到相关文章

最新更新