WriteFile返回错误1784

时间:2011-06-30 15:42:54

标签: c++ winapi writefile

我正在创建一个用虚拟文件系统填充磁盘的程序。

目前,我正在使用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)。

2 个答案:

答案 0 :(得分:4)

我的猜测是FileData不足以让你从中写i * 1024个字节。 i是文件列表的循环控制变量吗?如果是这样,当您循环浏览文件时,需要写缓冲区FileData一次增长1K。

这是一个不寻常的结构。你确定这里的逻辑是正确的吗?发布更多代码(特别是FileDatai的所有用法),以便更好地准确回答。

请注意,您不应该总是在这里检查GetLastError - 您需要先检查WriteFile的返回代码,然后才能依赖它。否则,您可能会从代码的某些不相关部分中获取错误 - 无论最后失败。

答案 1 :(得分:2)

我得到了一个Error = 1784,这是因为我在没有指定记录大小的情况下打开了文件,然后对文件进行了块读取。

Reset( FileHandle );

应该是

Reset( FileHandle, 1 );