begin process at 2012 05 30 12:35:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

WriteFile et Violation d'accès


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

WriteFile et Violation d'accès

mercredi 23 août 2006 à 18:25:25 | WriteFile et Violation d'accès

Ziman

Bonjour à tous,

je regarde un peu les API pour les fichiers. Voici mon code :

File = CreateFile("C:\\a.txt",
                                       FILE_ALL_ACCESS,
                                       FILE_SHARE_READ | FILE_SHARE_WRITE,
                                       NULL,
                                       OPEN_ALWAYS,
                                       FILE_ATTRIBUTE_NORMAL,
                                       NULL); // Crée le fichier
LPDWORD a = 0;
WriteFile(hFile, "bou", 3, a, NULL);
CloseHandle(hFile);

J'essaye juste d'écrire bou dans le fichier histoire de voir et en fait ça fonctionne, mais Visual C++ m'afficher un message d'erreur :

Exception non gérée à 0x77e864cd dans TXT.exe:0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00000000.

Quelqu'un peut me dire d'ou ca vient ? j'ai cru lire que ca venait du troisième paramètre de CreateFile mais bon j'autorise le partage en écriture et lecture donc je ne comprend pas

Apprendre le VB6
mercredi 23 août 2006 à 18:47:29 | Re : WriteFile et Violation d'accès

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
DWORD a = 0;
WriteFile(hFile, "bou", 3, &a, NULL);
mercredi 23 août 2006 à 18:49:45 | Re : WriteFile et Violation d'accès

racpp

Administrateur CodeS-SourceS
Ca vient du 4ème paramètre. Tu passes un pointeur nul à WriteFile(). C'est donc normal d'avoir ce message.
mercredi 23 août 2006 à 18:52:36 | Re : WriteFile et Violation d'accès

Ziman

Quand je met le "&", il me dit que le type de donnée n'est pas bon. Ensuite sous MSDN j'ai vu ceci :

lpNumberOfBytesWritten
[out] Pointer to the variable that receives the number of bytes written. WriteFile sets this value to zero before doing any work or error checking.
Donc apparement il serait initiliasé par la fonction par le nombre d'octet écrit dans le fichier. Et c'est deja un pointeur vu son style (LPDWORD). Bref j'ai essayé ta solution et ca ne fonctionne pas. Une autre idée ?

Merci d'avance

Apprendre le VB6
mercredi 23 août 2006 à 18:59:32 | Re : WriteFile et Violation d'accès

vecchio56

Administrateur CodeS-SourceS
Il faut passer un pointeur valide (le tien vaut NULL, et ne pointe don nulle part. Ou WriteFile va-t-il pouvoir écrire sa valeur?)
Avant de dire que racpp à tort, tu pourrais au moins essayer sa solution (qui est bonne c'est sue et certain)

_____________________________________
Un éditeur de ressources gratuit pour Windows

mercredi 23 août 2006 à 19:02:55 | Re : WriteFile et Violation d'accès

Ziman

Bon ... Je n'ai pas dit que racpp avait tord, loin de là, j'ai essayé sa solution mais je n'avais pas preté attention au fait qu'il avait changé le type de la variable. Toute mes excuses, cela fonctionne.

Merci racpp

Apprendre le VB6
mercredi 23 août 2006 à 19:11:51 | Re : WriteFile et Violation d'accès

racpp

Administrateur CodeS-SourceS
Ziman >> La programmation en C/C++ demande beaucoup de rigueur. Il ne faut jamais faire les choses trop vite. Avec le temps tu auras ce sens de la rigueur. Et ça aide aussi beaucoup dans la vie en général.
mercredi 23 août 2006 à 22:04:51 | Re : WriteFile et Violation d'accès

Ziman

D'accord, mais j'aurais une autre tite question justement sur ca.

La fonction recquiert un LPDWORD. Pourquoi est-ce que ca ne fonctionne pas directement quand j'envoie un LPDWORD ? Pourquoi faut-il passer l'adresse d'un DWORD ?

Un LPDWORD ne contient pas une adresse lorsqu'on le déclare ?

Apprendre le VB6
jeudi 24 août 2006 à 03:53:08 | Re : WriteFile et Violation d'accès

racpp

Administrateur CodeS-SourceS
LPDWORD signifie pointeur sur DWORD.
Avec LPDWORD on ne fait que déclarer le type de variable (pointeur sur DWORD). Avant de l'utiliser, il faut que ce pointeur soit correctement initialisé. Pour simplifier, un pointeur est une case mémoire contenant l'adresse d'une autre case mémoire. On peut dire qu'il pointe vers une autre case mémoire. Ce pointeur doit donc contenir une adresse valide. Quand tu  fais  LPDWORD a=0;   ça veut dire que ton pointeur contient l'adresse 0 qui n'est pas une adresse valide. WriteFile() a besoin de connaitre l'adresse d'un DWORD pour y mettre le nombre d'octets écrits. Son 4ème paramètre est donc un pointeur sur notre DWORD (d'où le LPDWORD). Si on veut passer l'adresse d'une variable à une fonction directement, on fait précéder le nom de la variable par le symbole "&". Voilà, j'espère que c'est assez clair.
DWORD b=0;
LPDWORD a=&b;

Dans cet exemple, notre pointeur a est bien initialisé car il contient l'adresse de la variable b.




Cette discussion est classée dans : file, accès, createfile, violation, writefile


Répondre à ce message

Sujets en rapport avec ce message

handle de Createfile ET writefile [ par oudkaramla ] salut tout le mondej'ai un pepin avec le HANDLE DE createfile, en effet malgré que j'ai déclaré le handle comme variable globale, il perds sa valeur e Probleme CreateFile, WriteFile, DeleteFile [ par idk ] IDK(DOS et API windows)Est ce qu'il faut fermet le fichier apres avoir utiliser CreateFi Violation d'accès lors de la lecture de l'emplacement.... [ par Oodini ] Bonjour, J'obtiens l'erreurException de première chance à 0x0cdcd5e8 dans maya.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement CreateFile [ par leuk ] Salut à tous,J'aimerai utiliser le systéme de fichier windows pour sauvegarder des donner puis les lire en utisant createfile(), writefile(), readfile Erreur : Access violation [ par dayvid75014 ] Bonjour à tous,Je fais ceci : FILE *ip_file;seek(ip_file, synchro_bytes[1], 0);  //synchro_bytes stocke mon 1er octet de synchro, je me positionne des Probleme CreateFile à l'ouverture du disque C: sous vista [ par ksoft_cppfrance ] En fait je suis en train de developper une application qui permet de lire et ecrire sur le disque. Pour cela, j'utilise les fonctions CreateFile, Read fgets() : Violation d'accès lors de la lecture de l'emplacement 0x00000004. [ par VoLc0m ] Bonjour à tous, voila une demi journée que je me casse la tête sur le problème suivant : Lorsque j'appelle la fonction fgets(), je récupère dans la s Ouvrir le nom d'un fichier dans une chaîne de caractères [ par noname001 ] Bonjour à tous, J'ai un soucis dans le développement d'un programme. En effet, j'ouvre tout d'abord un fichier.txt qui contient toute une liste de no Readfile et access denied [ par sran_isback ] Bonjour ! J'aimerai récupérer le contenu d'un fichier texte et le coller dans un tableau de char afin de pouvoir l'utiliser dans une autre partie du


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,632 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales