begin process at 2012 05 30 02:04:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

probleme avec eof :(


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

probleme avec eof :(

mardi 15 novembre 2005 à 16:26:45 | probleme avec eof :(

lamoueste

Bonjour a tous alors j'ai un probleme plutot basique je voudrais savoir pkoi le compilateur refuse "FileR.eof()" alors qu'il n'y a pas de raison d'apres moi enfin si quelqu'un voit la solution merci d'avance :) BOOL TranslateBinFile(FILE *FileR) { BOOL bErr = false; FILE *FileW; CString ChaineASC = ""; unsigned long cpt,longueur = 16; char Buffer[16]; FileW = fopen("c:\\t\\b.txt","w"); if ( FileR ) // check if FileR is open { while(! FileR.eof() )// bug :'( { fread( Buffer, sizeof( char ), 16, FileR ); for(cpt = 0;cpt
mardi 15 novembre 2005 à 17:27:08 | Re : probleme avec eof :(

BruNews

Administrateur CodeS-SourceS
Tu le veux en vrai win32 ? excuse parce que là c'est vraiment trop le souk, imagine ce que ton CString fait comme allocs et desallocs, un scandale pour ton espace mémoire.

Le but est bien de séparer tout par un espace en plus de remplacer par '.' si octet < 32 ???

ciao...
[ Lien ]
BruNews, MVP VC++
mardi 15 novembre 2005 à 18:01:46 | Re : probleme avec eof :(

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

#include <windows.h>

#define BUFF_READ   (1024 * 4)
#define BUFF_WRITE  (1024 * 8)
#define BUFF_TOTAL  (BUFF_READ + BUFF_WRITE)
#define MEMDISPO    (MEM_RESERVE | MEM_COMMIT | MEM_TOP_DOWN)

char szappname[] = "Transfl";

int __stdcall TranslateFile(char *pszfl, char *pszdst)
{
  HANDLE hfl, hdst;
  DWORD d, i, r;
  BYTE *pmem, *pdst;
  int berr = 1; // PRESUME ERRREUR
  hfl = CreateFile(pszfl, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0);
  if(hfl == INVALID_HANDLE_VALUE) goto transEXIT;
  pmem = (BYTE*) VirtualAlloc(0, BUFF_TOTAL, MEMDISPO, PAGE_READWRITE);
  if(!pmem) goto closeSRC;
  hdst = CreateFile(pszdst, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
  if(hdst == INVALID_HANDLE_VALUE) goto relMEM;
fromSRC:
  // ON LIT PAR PASSES DE 4 Ko, POURRAIT ETRE PLUS
  d = 0; ReadFile(hfl, pmem, BUFF_READ, &d, 0);
  if(!d) goto srcOUT;
  pdst = pmem + BUFF_READ; // BUFFER ECRITURE
  for(i = 0; i < d; i++) {
    *pdst++ = ' ';
    *pdst++ = (pmem[i] < 0x20) ? '.': pmem[i];
  }
  // ON ECRIT DOUBLE DE TAILLE LUE
  WriteFile(hdst, pmem + BUFF_READ, d * 2, &r, 0);
  if(d >= BUFF_READ) goto fromSRC; // PEUT RESTER DES OCTETS A LIRE
srcOUT:
  berr = 0; // OK NO ERROR EST FINI
  CloseHandle(hdst);
  if(berr) DeleteFile(pszdst);
relMEM: VirtualFree(pmem, 0, MEM_RELEASE);
closeSRC: CloseHandle(hfl);
transEXIT: return berr;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
  int err = TranslateFile("D:\\Bidon.bin", "D:\\Bidon.txt");
  MessageBox(0, err ? "ERREUR": "OK", szappname, 0);
  return 0;
}


Voila, pas testé mais devrait aller, tu me diras.
Vois qu'il n'y a qu'1 alloc de mémoire et vaut pour 2 buffers (lecture et écriture).

ciao...
[ Lien ]
BruNews, MVP VC++

mercredi 16 novembre 2005 à 09:57:11 | Re : probleme avec eof :(

lamoueste

Yep merci beaucoup BruNews mais je dois t'embeter encore un peu, pourrais-tu m'expliquer la ligne : pmem = (BYTE*) VirtualAlloc(0, BUFF_TOTAL, MEMDISPO, PAGE_READWRITE); J'ai regarder sur msdn mais j'avoue que je comprend pas ce que fait cette fonction ( precisement ) Et 2e chose : j'avais un CString comme parametre qui m'etait retourner par une autre fonction et j'arrive pas a convertir une CString en char* :( Enfin merci bcp quoi qu'il en soit :)
mercredi 16 novembre 2005 à 10:54:36 | Re : probleme avec eof :(

BruNews

Administrateur CodeS-SourceS
CString a un opérateur (char*) ou plutôt (LPSTR) donc devrait caster de lui même.

MEMDISPO est un #define perso pour (grosso modo) grouper demandes:
- réservation zone mémoire.
- affectation réelle illico de cette zone.
- flags READ et WRITE sur cette zone.
La zone est de plus complétement initialisée de zéros.

BUFF_TOTAL vaut 12 Ko pour 1 buff de 4 Ko pour lecture + 1 buff de 8 Ko qui sera où on met la translation avant d'en demander le tamponnage dans fichier en 1 seule passe.

Faut avoir Richter sur ton PC et t'y reporter en cas de doute:
[ Lien ]
[ Lien ]

ciao...
[ Lien ]
BruNews, MVP VC++
mercredi 16 novembre 2005 à 10:56:47 | Re : probleme avec eof :(

lamoueste

Ok merci bcp pour les info je vais me cultiver un peu :)


Cette discussion est classée dans : buffer, end, cpt, filer, chaineasc


Répondre à ce message

Sujets en rapport avec ce message

écriture dans un fichier txt [ par jimtruand ] bonjour,j'ai un fichier txt à traiter et à envoyer via ftp à un serveur. la partie ftp est ok.la partie fichier pt'problèmedans le fichier je dois mod Programme Crasher [ par Kephren ] Salut, je viens demander de l'aide à propos de mon programme. En fait il marche très bien mais depuis que j'ai rajoutée du code, une fois compilé, je E/S sur port série [ par Gaelle ] SalutMon prog (sous VC++6) gère le port serie pour l'envoi et la reception d'info. J'utilise pour cela les fonctions _outp(PORT, int) et _inp(PORT)Mon Validation NAS [ par cats ] Bonjour, Je dois faire un petit programme qui valide l'exactitude d'un numéro d'assurance sociale (Québec). Seule la forme suivante doit-être accepté: Validation NAS [ par cats ] Bonjour, Je dois faire un petit programme qui valide l'exactitude d'un numéro d'assurance sociale (Québec). Seule la forme suivante doit-être accepté: [allegro]Pb de base [ par kjus ] Valla g installé la lib pour vc++6seulement voila mon premier code allegro :et pas moyen d'afficher quoi que ce soit (g aussi essayé de faire buffer=l Transfert d'un fichier d'un ftp [ par header ] Salut,J'ia besion d'aide : pour que tlm puisse comprendre voici mon source : char buffer[DWN_BUFFER]; // c un define 4096unsigned int count = DWN_BUFF Caractères spéciaux [ par redpooka ] Comment faire je lis un fichier et je met son contenu dans une string, or quand je l'affiche les caractères spéciaux (é, ç...) ne marchent pas ? Comme Question sur les pointeurs [ par Darkneon ] Voici un programme tiree de "Simple C++"#include #include class Court{private: //attributes char * Buffer avec WriteFile ??????????? [ par nanalye ] Bonjour tout le monde !J'ai regardé sur le forum ce qui était mis sur ce sujet mais je n'ai pas tout compris.Je dois envoyer des entiers par le biais


Nos sponsors


Sondage...

Comparez les prix

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,803 sec (3)

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