我正在创建一个用虚拟文件系统填充磁盘的程序。
目前,我正在使用WriteFile
编写可变大小的文件。
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();
错误返回#1784,转换为
提供的用户缓冲区对请求的操作无效。 ERROR_INVALID_USER_BUFFER
因此对于前24个文件,写操作有效。对于文件#25 on,写入操作失败。 仍然会创建文件,但WriteFile函数不会填充文件。
有关如何过去ERROR_INVALID_USER_BUFFER
的任何想法?
我可以找到错误的每个参考仅限于崩溃程序,我无法弄清楚它与我遇到的问题有什么关系。
编辑:
FileData = (char *) malloc(sizeof(char) * (size_t)k * 1024);
memset(FileData, 245, sizeof(char) * (size_t)k * 1024);
设置FileData并将其分配给最大预期缓冲区的大小。 我是迭代的循环变量,直到它增加到最大大小(k)。
答案 0 :(得分:4)
我的猜测是FileData
不足以让你从中写i * 1024
个字节。 i
是文件列表的循环控制变量吗?如果是这样,当您循环浏览文件时,需要写缓冲区FileData
一次增长1K。
这是一个不寻常的结构。你确定这里的逻辑是正确的吗?发布更多代码(特别是FileData
和i
的所有用法),以便更好地准确回答。
请注意,您不应该总是在这里检查GetLastError
- 您需要先检查WriteFile
的返回代码,然后才能依赖它。否则,您可能会从代码的某些不相关部分中获取错误 - 无论最后失败。
答案 1 :(得分:2)
我得到了一个Error = 1784,这是因为我在没有指定记录大小的情况下打开了文件,然后对文件进行了块读取。
Reset( FileHandle );
应该是
Reset( FileHandle, 1 );