C++ WriteFile返回错误1784
我正在创建一个程序,用虚拟文件系统填充磁盘 目前,我正在使用C++ WriteFile返回错误1784,c++,winapi,writefile,C++,Winapi,Writefile,我正在创建一个程序,用虚拟文件系统填充磁盘 目前,我正在使用WriteFile编写大小可变的文件 WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL); err = GetLastError(); err返回#1784,转换为 提供的用户缓冲区对于请求的操作无效。错误\u无效\u用户\u缓冲区 因此,对于前24个文件,写操作有效。对于打开的文件#25,写入操作失败。 文件仍会创建,但WriteFile函
WriteFile
编写大小可变的文件
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();
err返回#1784,转换为
提供的用户缓冲区对于请求的操作无效。错误\u无效\u用户\u缓冲区
因此,对于前24个文件,写操作有效。对于打开的文件#25,写入操作失败。
文件仍会创建,但WriteFile函数不会填充文件
关于如何通过错误\u无效\u用户\u缓冲区
有什么想法吗
我所能找到的每一个关于这个错误的参考资料都局限于程序崩溃,我无法找出它与我所经历的问题之间的关系
编辑:
FileData设置并分配到最大缓冲区的大小。
i是循环变量,它会不断迭代,直到递增到最大大小(k)。我猜
FileData
不够大,您无法从中写入i*1024
字节。i
是文件列表的循环控制变量吗?如果是这样的话,在循环文件时,需要写入缓冲区FileData
一次增加1K
这是一个不寻常的构造。你确定这里的逻辑正确吗?发布更多代码(特别是FileData
和i
的所有用法),以提高答案的准确性
请注意,您不应该总是在此处检查
GetLastError
——您需要先检查WriteFile
的返回代码,然后才能确定它是否有意义。否则,您可能会从代码的某个不相关部分(无论最后失败的部分)中发现错误。我得到一个错误=1784,这是因为我打开文件时没有指定记录的大小,然后阻止了对文件的读取
Reset( FileHandle );
应该是
Reset( FileHandle, 1 );
我们如何知道这些参数是什么类型的,以及您以前对它们做了什么?另外,请注意,崩溃通常是UB的结果(UB本身通常试图访问无效内存)。然而,崩溃并不总是UB的结果。可能发生的事情是不可预测的。因此,如果预计不会发生崩溃,请不要对其进行太多读取。每当有太多未完成的异步I/O请求时,WriteFile函数可能会失败,并出现错误\u无效\u用户\u缓冲区或错误\u内存不足。这不是异步I/O,
LPOVERLAPPED
为空。更可能是一个简单的缓冲区误用。也就是说,没有代码就很难起到帮助作用。更新了原始帖子并提供了更多详细信息。同样,当dwwrite为0时,WriteFile在失败时返回0。根据随机代码片段提供准确的建议是不可能的。得到一个最低限度的足够的错误,然后张贴它所有。你的评论上面证明是正确的。缓冲区被重新分配到不正确的大小。
Reset( FileHandle, 1 );