问题
I am creating a program to populate a disk with a dummy file system.
Currently, I am writing files of variable sizes using WriteFile
.
WriteFile(hFile, FileData, i * 1024, &dwWrote, NULL);
err = GetLastError();
err returns #1784 which translates to
The supplied user buffer is not valid for the requested operation. ERROR_INVALID_USER_BUFFER
So for the first 24 files, the write operation works. For file #25 on, the write operation fails. The files are still created but the WriteFile function does not populate the files.
Any ideas on how to get past ERROR_INVALID_USER_BUFFER
?
Every reference I can find to the error is limited to crashing programs and I cannot figure out how it relates to the issue I am experiencing.
EDIT:
FileData = (char *) malloc(sizeof(char) * (size_t)k * 1024);
memset(FileData, 245, sizeof(char) * (size_t)k * 1024);
FileData is set and allocated to the size of the maximum anticipate buffer. i is the loop variable that iterates until it increments to the Maximum Size (k).
回答1:
My guess is that FileData
is not large enough for you to write i * 1024
bytes from it. Is i
the loop control variable for your list of files? If so, you need the write buffer FileData
to grow 1K at a time as you loop through your files.
This is an unusual construct. Are you sure the logic is correct here? Post more code (specifically, all usage of FileData
and i
) for better accuracy in the answers.
Note that you should not always be checking GetLastError
here - you need to check WriteFile
's return code before you rely on that being meaningful. Otherwise you could be picking up an error from some unrelated part of your code - whatever failed last.
回答2:
I got a Error = 1784 and it was because I opened the file without specifying the size of records and then did block reads on the file.
Reset( FileHandle );
Should be
Reset( FileHandle, 1 );
来源:https://stackoverflow.com/questions/6537416/writefile-returning-error-1784