c++ - WriteFile 返回错误 1784

标签 c++ winapi writefile

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

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

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

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

关于c++ - WriteFile 返回错误 1784,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537416/

相关文章:

javascript - create-react-app 排除文件夹触发重新加载

ios - 快速从文件中减去并更新

winapi - Windows API : ANSI and Wide-Character Strings -- Is it UTF8 or ASCII? UTF-16 还是 UCS-2 LE?

c++ - OpenGL视频帧适配

c++ - 将命名空间赋予 C++ 中的现有库

c++ - 使用 C++ 的代码块中的链接器错误问题

c++ - Listview 三态复选框

winapi - Windows下如何用汇编语言编写hello world?

function - os.O_TRUNC 的作用是什么?

c++ - 如何使用 boost::bind 将返回 int 的函数转换为返回 bool 的函数?