CreateFile() A Échoué Avec GetLastError() = 5
J'ai écrit un exemple d'application pour lire le fichier à partir de l'autre fichier. Lorsque j'exécute ce formulaire de demande de machine virtuelle, je suis d'Accès refusé. Ci-dessous est le code.
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR *wcsPath = L"\\\0.160.130.22\\share\3.XML";
HANDLE hFile = CreateFileW(wcsPath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
0);
if (NULL == hFile)
{
printf("failed - %d", GetLastError());
}
return 0;
}
S'il vous plaît laissez-moi savoir les changements.
- Voir si vous pouvez ouvrir ce fichier avec le bloc-notes. Les droits de chaque utilisateur, et non par programme - si vous ne pouvez pas le lire à partir du bloc-notes, votre programme ne sera pas non plus.
- je peux l'ouvrir dans le bloc-notes
- Vous devez vérifier si l'utilisateur qui exécute le programme a le droit d'ouvrir le fichier, le droit d'ouvrir le partage et que le fichier n'est pas ouvert dans un autre programme.
- À partir de la machine virtuelle, ouvrez l'Explorateur, localiser le fichier. Alors voyez un
Security
onglet. Cliquez surAdvanced
. Cliquez surEffective Permissions
, et de vérifier si vous avez toutes les autorisations requises.
Vous devez vous connecter pour publier un commentaire.
Code d'erreur 5 signifie "Accès Refusé". Vous devriez vérifier votre utilisateur des droits d'accès.
La sortie d'erreur de CreateFileW() est INVALID_HANDLE_VALUE, pas NULL. Maintenant, NULL certainement sonne comme une bonne valeur pour un descripteur de fichier trop, mais quand même.
Est collé extrait de code exactement le contenu de votre programme, ou un récit?
EDIT: je vois une VM en cause. Vous pouvez ouvrir le fichier dans le bloc-notes de la machine virtuelle où le programme est en cours d'exécution et erroring arrière?
FILE_SHARE_*
réglage. Il peut utiliser FILE_SHARE_WRITE ou FILE_SHARE_DELETE.Je crois la documentation pour CreateFile détient la réponse.
Il peut être que votre dwShareMode est à l'origine du problème. À l'aide de
FILE_SHARE_READ
il dit, "permettre à d'autres dispositifs d'ouverture pour ouvrir le fichier pour l'accès en LECTURE". Si vous ne spécifiez pas FILE_SHARE_WRITE", puis d'autres dispositifs d'ouverture ne sera pas en mesure d'ouvrir le fichier pour l'écriture - votre achat en empêcher.Mais, CreateFile, je crois, aussi échoue lorsque le sharemode serait violée par avant ouverture. Si cela est vrai, alors si une autre application a déjà ouvert le fichier pour l'accès en écriture, alors votre appel à CreateFile échoue, si vous spécifiez dwShareMode =
FILE_SHARE_READ
. Voyez-vous? Vous devrez peut-être spécifierFILE_SHARE_WRITE | FILE_SHARE_READ
pour que dwShareMode paramètre.De l'essayer.
ERROR_SHARING_VIOLATION
.