2

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

目前,我正在使用WriteFile.

        WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
        err = GetLastError();

错误返回 #1784 转换为

提供的用户缓冲区对于请求的操作无效。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)。

4

2 回答 2

4

我的猜测是这FileData还不够大,您无法从中写入i * 1024字节。您的文件列表是i循环控制变量吗?FileData如果是这样,您需要在循环文件时一次增加 1K的写入缓冲区。

这是一个不寻常的结构。你确定这里的逻辑是正确的吗?FileData发布更多代码(特别是和的所有用法i)以提高答案的准确性。

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

于 2011-06-30T15:48:16.573 回答
2

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

Reset( FileHandle );

应该

Reset( FileHandle, 1 );
于 2011-12-03T19:23:35.957 回答