Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ windows下的read-in-mingw不会读取整个文件。为什么?_C++_File_Mingw_Binaryfiles - Fatal编程技术网

C++ windows下的read-in-mingw不会读取整个文件。为什么?

C++ windows下的read-in-mingw不会读取整个文件。为什么?,c++,file,mingw,binaryfiles,C++,File,Mingw,Binaryfiles,在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); co

在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上工作?

阅读手册非常有用

返回值

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

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

  • 使用功能
    \u set\u fmode
    更改新打开文件的默认模式。使用
    \u get\u fmode
    查找当前默认模式初始默认设置为文本模式(\u O\u text)

  • 通过在程序中设置全局变量
    \u fmode
    直接更改默认转换模式。函数
    \u set\u fmode
    设置此变量的值,但也可以直接设置

open(仅文件名)在Windows中以文本模式打开文件


open(文件名,O|RDONLY | O|u二进制文件)
在Windows中以二进制模式打开文件,如果文件中剩余的字节足够多,则进一步的
读取
将读取所有请求的字节。

是否尝试过
O|u RDONLY | O|u binary
?我怀疑二进制文件的字节232被错误地检测为文件结尾(在Windows中)。我在这里和那里看到过
O_BINARY
,但没有找到类似“权威”文档的东西。我通常使用谷歌man open,没有意识到兼容性函数不兼容。在哪里可以找到文档?我使用man 2 open查找open函数,这当然没有显示不兼容。您所指的手册在哪里?@Dov在为Windows编程时,为什么要阅读Linux手册页?同样,您所指的手册在哪里?正在搜索mingw库文档打开阅读。。。没有找到答案。我一直认为这些函数与linux相同,因为这是它们的用途。大多数都是这样。你是想提供一个答案还是对批评更感兴趣?如果你在建议中看到批评,我很抱歉,第一个环节。