我正在创建一个用虚拟文件系统填充磁盘的程序。
目前,我正在使用WriteFile编写可变大小的文件。
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();err返回#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被设置并分配到最大预期缓冲区的大小。I是循环变量,它一直迭代到最大值(k)为止。
发布于 2011-06-30 15:48:16
我的猜测是,FileData不足以让您从它编写i * 1024字节。i是否是文件列表的循环控制变量?如果是这样的话,当您循环遍历文件时,您需要写缓冲区FileData一次增长1K。
这是一个不寻常的构造。你确定这里的逻辑是正确的吗?发布更多代码(特别是FileData和i的所有用法),以提高答案的准确性。
请注意,您不应该总是在这里检查GetLastError --在您认为这是有意义的之前,您需要检查WriteFile的返回代码。否则,您可能会从代码的某个不相关部分(不管上次发生了什么故障)获取一个错误。
发布于 2011-12-03 19:23:35
我得到了一个错误= 1784,这是因为我打开文件时没有指定记录的大小,然后对文件进行块读取。
Reset( FileHandle );应该是
Reset( FileHandle, 1 );https://stackoverflow.com/questions/6537416
复制相似问题