I have CreateFile()
to create a hidden file type but the problem that it keeps returning invalid handle.
file = CreateFileW(_T("hey.txt"),
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
0, 0);
error = GetLastError();
WriteFile(file, buff, sizeof(buff),
&dwRet, NULL);
Any idea?
If "C:\test.txt" exists and is hidden, then following code fails (h = INVALID_HANDLE_VALUE) :
this fails too (argument 6 == FILE_ATTRIBUTES_NORMAL or argument6 == 0 seems so be the same) :
but this works :
So roughly in other words : if the file already exists and is hidden then CreateFile with "CREATE_ALWAYS" fails if argument 6 != FILE_ATTRIBUTE_HIDDEN.
It would probably be best if you showed the exact code that you're using including all the error checking, and how you do it, is important (especially in the case of this question)...
The correct error checking for your code should be something more like...
You should only be checking for an error if you get a return value of
INVALID_FILE_HANDLE
asCreateFile()
might not reset the last error before it starts and so you might get spurious error values fromGetLastError()
if the function succeeds...A last error of 6,
ERROR_INVALID_HANDLE
, is unusual fromCreateFile()
unless you're using the template file parameter, which you're not...Your code using
CreateFileW
and _T("") is incorrect and wont compile in a non unicode build. Better to useCreateFile
and _T("") orCreateFileW
and L"".Your code will not create a hidden file, see molbdnilo's answer.
0
is not a valid parameter fordwFlagsAndAttributes
. To create a hidden file, passFILE_ATTRIBUTE_HIDDEN
.