Readfile et access denied

sran_isback Messages postés 41 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 30 janvier 2013 - 3 janv. 2010 à 15:09
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 3 janv. 2010 à 16:49
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 janv. 2010 à 16:49
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++
0
Rejoignez-nous