我正在创建一个程序来使用虚拟文件系统填充磁盘。
目前,我正在使用 WriteFile
写入可变大小的文件。
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();
err 返回 #1784,翻译为
The supplied user buffer is not valid for the requested operation. ERROR_INVALID_USER_BUFFER
因此对于前 24 个文件,写入操作有效。对于文件 #25,写入操作失败。 文件仍会创建,但 WriteFile 函数不会填充文件。
关于如何克服ERROR_INVALID_USER_BUFFER
有什么想法吗?
我能找到的所有关于该错误的引用都仅限于崩溃的程序,我无法弄清楚它与我遇到的问题有何关系。
编辑:
FileData = (char *) malloc(sizeof(char) * (size_t)k * 1024);
memset(FileData, 245, sizeof(char) * (size_t)k * 1024);
FileData 设置并分配到最大预期缓冲区的大小。 i 是迭代的循环变量,直到递增到最大大小 (k)。
最佳答案
我的猜测是,FileData
不够大,无法从中写入 i * 1024
字节。 i
是文件列表的循环控制变量吗?如果是这样,您需要在循环访问文件时写入缓冲区 FileData
一次增加 1K。
这是一个不寻常的结构。你确定这里的逻辑是正确的吗?发布更多代码(特别是 FileData
和 i
的所有用法),以提高答案的准确性。
请注意,您不应该总是在此处检查 GetLastError
- 您需要先检查 WriteFile
的返回代码,然后才能相信它有意义。否则,您可能会从代码的某些不相关部分中发现错误 - 无论最后失败什么。
关于c++ - WriteFile 返回错误 1784,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537416/