gpt4 book ai didi

c - Win32 ReadFile() 拒绝一次读取超过 16Mb 的数据?

转载 作者:太空狗 更新时间:2023-10-29 15:53:36 26 4
gpt4 key购买 nike

<分区>

我在 VirtualBox 中的 Windows XP 上遇到了一个非常奇怪的问题。

ReadFile() 函数拒绝在单次调用中读取超过 16Mb 的数据。它返回错误代码 87 (ERROR_INVALID_ARGUMENT)。看起来数据长度限制为 24 位。

这是让我找出确切限制的示例代码。

#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <sys/stat.h>

int _tmain(int argc, _TCHAR* argv[])
{
int fd,len,readed;
char *buffer;
char *fname="Z:\\test.dat";
fd=_open(fname,_O_RDWR|_O_BINARY,_S_IREAD|_S_IWRITE);
if (fd==-1) {
printf("Error opening file : %s\n",strerror(errno));
getch();
return -1;
}
len=_lseek(fd,0,SEEK_END);
_lseek(fd,0,SEEK_SET);
if (!len) {
printf("File length is 0.\n");
getch();
return -2;
}
buffer=(char *)malloc(len);
if (!buffer) {
printf("Failed to allocate memory.\n");
getch();
return -3;
}
readed=0;
while (readed<len) {
len-=100;
readed=_read(fd,buffer,len);
if (len<=100) break;
}
if (readed!=len) {
printf("Failed to read file: result %d error %s\n",readed,strerror(errno));
getch();
return -4;
}
_close(fd);
printf("Success (%u).",len);
getch();
return 0;
}

文件 Z:\test.dat 长度为 21Mb。

结果是“成功(16777200)。

我试图在谷歌中找到同样的问题但没有成功:(

可能有人知道问题的原因是什么?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com