Pourquoi ne CreateFile retour handle non valide?
J'ai CreateFile()
pour créer un fichier caché, mais le problème qu'il conserve son retour handle non valide.
file = CreateFileW(_T("hey.txt"),
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
0, 0);
error = GetLastError();
WriteFile(file, buff, sizeof(buff),
&dwRet, NULL);
Une idée?
- Je ne peux pas voir quelque chose de mal dans votre code. Qu'est-ce que l'erreur signalée par
GetLastError()
(si il y en a une)? Comment savez-vousfile
est un handle non valide? En outre, ce code ne crée pas un fichier caché. - Eh bien j'ai utilisé le GetLastError() et je me suis "a Échoué avec l'erreur 6: descripteur non valide"
- Êtes-vous sûr que c'est le message d'erreur après CreateFileW, et pas l'erreur après WriteFile? Vous n'avez pas inclure un chemin d'accès pour
hey.txt
, peut-être que vous n'avez pas accès en écriture à l'emplacement que vous utilisez. Et il n'est pas nécessaire d'utiliser CreateFileW, CreateFile serait bien aussi. - Merci, je n'ai pas accès à elle. Merci
Vous devez vous connecter pour publier un commentaire.
Il serait probablement mieux si vous avez montré le code exact que vous utilisez, y compris tous les contrôle d'erreur, et comment vous le faites, est important (surtout dans le cas de cette question)...
La bonne vérification des erreurs pour votre code doit être quelque chose de plus comme...
Vous ne devriez vérifier pour une erreur si vous obtenez une valeur de retour de
INVALID_FILE_HANDLE
commeCreateFile()
pourrait ne pas réinitialiser la dernière erreur avant qu'il ne commence, et ainsi vous pouvez obtenir de fausses valeurs de l'erreur deGetLastError()
si la fonction réussit...Une dernière erreur de 6,
ERROR_INVALID_HANDLE
, c'est inhabituel deCreateFile()
sauf si vous utilisez le fichier de modèle de paramètre que vous n'êtes pas...Votre code à l'aide de
CreateFileW
et _T("") est incorrect et l'habitude de compiler dans un non la version unicode. Mieux utiliserCreateFile
et _T("") ouCreateFileW
et L"".Votre code ne va pas créer un fichier caché, voir molbdnilo de réponse.
0
n'est pas un paramètre valide pourdwFlagsAndAttributes
. Pour créer un fichier caché, passerFILE_ATTRIBUTE_HIDDEN
.Si "C:\test.txt" il existe et est masqué, puis le code suivant échoue (h = INVALID_HANDLE_VALUE) :
cela échoue trop (argument 6 == FILE_ATTRIBUTES_NORMAL ou argument6 == 0 semble donc être le même) :
mais cela fonctionne :
Donc à peu près en d'autres termes :
si le fichier existe déjà et est caché puis CreateFile avec "CREATE_ALWAYS" échoue si l'argument de 6 != FILE_ATTRIBUTE_HIDDEN.