La documentation implique qu'EINVAL serait le résultat si l'un des paramètres était invalide. Puisque "r+"
doit être un pointeur valide, et en supposant qu'il ait été compilé _SH_DENYRW
doit être un indicateur valide, la seule question restante est de savoir si votre variable path
n'est pas NULL, pointe vers la mémoire qui existe et peut être lue, et contient une valeur valide. nom du chemin
Je viens d'essayer ce qui suit: «Ouvrez ok »
#include <stdio.h>
#include <share.h>
int main(int argc, char **argv)
{
FILE *f;
if (argc != 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
exit(1);
}
f = _fsopen(argv[1], "r+", _SH_DENYRW);
if (f) {
printf("Open ok.\n");
fclose(f);
} else {
perror(argv[1]);
}
return 0;
}
Sur les fichiers qui existent et peuvent être écrits, quelle que soit leur taille, il imprime, ce qui signifie que _fsopen()
réussi. Deux autres cas:
Un fichier en lecture seule:
C:>fsopen ro.txt
ro.txt: Permission denied
Aucun fichier:
C:>fsopen nosuchfile
nosuchfile: No such file or directory
Un fichier de périphérique:
C:>fsopen NUL:
Open ok.
Un fichier de longueur nulle:
C:>fsopen zero.txt
Open ok.