Readfile et access denied

Signaler
Messages postés
41
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
30 janvier 2013
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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 programme.
J'utilise donc la fonction Readfile() mais elle ne lit rien et me renvois une erreur 5 ( Access Denied). Où ai je fait une erreur ?

Voila un peu de code :
- la déclaration de la classe (memoire.h)

#pragma once

class memoire
{
public:

HANDLE file,filemap;
char buffer[50],buffermap[50],reserve[50],reservemap[50];

memoire(void);

void enregistrement(int nbr,char *pcontent,int mode);
void sauvegarde(void);
void readstock(void);

};
- et le fichier memoire.cpp qui va avec :

#include "StdAfx.h"
#include "memoire.h"
#include


memoire::memoire(void)
{

if(_access("stock.txt",00) == 0 && _access("map.txt",00)==0)
{
DeleteFile("stock.txt");
DeleteFile("map.txt");
}

this->file = CreateFile("stock.txt",GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
this->filemap = CreateFile("map.txt",GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);

strcpy(this->buffer,"");
strcpy(this->buffermap,"");
strcpy(this->reserve,"");
strcpy(this->reservemap,"");

}

void memoire::enregistrement(int nbr,char *pcontent,int mode)
{
char sub[3];

switch (mode)
{
case 0:

itoa(nbr,sub,10);

strcat(this->buffer,sub);


break;

case 1:

strcat(this->buffer,pcontent);

break;

case 2:

itoa(nbr,sub,10);

strcat(this->buffermap,sub);

break;

case 3:

strcat(this->buffermap,pcontent);

break;

}

}

void memoire::sauvegarde(void)
{
DWORD ecris;

WriteFile(this->file,this->buffer,strlen(this->buffer),&ecris ,0);
WriteFile(this->filemap,this->buffermap,strlen(this->buffermap),&ecris ,0);

strcpy(this->buffer,"");
strcpy(this->buffermap,"");
}

void memoire::readstock(void)
{
DWORD taille,lu;

ReadFile(this->file,this->reserve,GetFileSize(this->file,&taille),&lu,0);

}


Merci!

1 réponse

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Si on code API, _access() et autres trucs du CRT sont à exclure.
if(0 > (long) GetFileAttributes(szfile)) ABSENT
A noter que dans ton cas ne me semble pas utile, CreateFile dira ce qu'il en est.

Il faut vérifier CHAQUE retour des fonctions API.
hfl = CreateFile(szfl, GENERIC_READ | GENERIC_QWRITE, 0, 0, OPEN_ALWAYS, 0, 0);
if(hfl == INVALID_HANDLE_VALUE) CasAtraiter !!!

idem pour GetFileSize(), consulter GetLastError().
ReadFile() seulement si taille > 0.
Sans compter que si taille > sizeof(reserve) alors badaboum ton prog.

Avec nom de fichier sans chemin, fauty assurer la currentDirectory au lancement du prog.
etc, etc.

ciao...
BruNews, MVP VC++