Petite question à propos de l'accès en mode binaire des fichiers...

Petite question à propos de l'accès en mode binaire des fichiers... - C++ - Programmation

Marsh Posté le 03-08-2004 à 15:01:55    

:hello:
 
Je me pose une question là, parceque soit il y a un truc qui cloche, soit je me suis inventé des choses pendant que je dormais... :ange:
 
Alors pour reprendre un exemple de msdn (qui contient des erreurs :/) et qui est trouvable ici, voici ma question :
 
Si j'ouvre un fichier en mode binaire, comme ceci par exemple :

Code :
  1. ofstream ofs( "test.dat", ios::binary );


Et qu'ensuite toujours en suivant les exemple de msdn je copie deux ptit caractères dedans comme ceci :

Code :
  1. char cArray[2] = {'a', 'b'};
  2. ofs.write( ( char* ) cArray, 4 ); // Exactly 4 bytes written


Je ne devrais pas obtenir un fichier "test.dat" avec les deux caractères "ab" dedans codés en binaire et donc illisibles depuis notepad par exemple ? :??:
 
Parceque que je mette le "binary" ou pas ca ne change absolument rien et je me retrouve avec les caractères dans le fichier comme dans un banal fichier texte... [:spamafote]
 
Donc je delire ou il y a un problème ?
 
Mercÿte :jap:

Reply

Marsh Posté le 03-08-2004 à 15:01:55   

Reply

Marsh Posté le 03-08-2004 à 15:05:50    

ben en binary tu colles le code des caractères A et B, donc quand tu ouvres dans notepad il lit tous les octets comme des caractères et retrouve A et B, c'est parfaitement normal :)


Message édité par masklinn le 03-08-2004 à 15:06:58

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-08-2004 à 15:16:26    

Ah vi oky, c'est vrai que vu comme ca c'est logique...
 
Mais il me semblait qu'en ecrivant en mode binaire avec un fwrite en C par exemple (ou une autre méthode me rappelle plus :ange:) on aboutissait à un fichier illisible à l'aide de notepad ? Ou alors il faut un éditeur hexa ou un truc dans le genre... Mais c'est des souvenirs tout ca et pitètre que je me les invente pour me faire inconsciement plaisir... :/ Ou alors on ne peut pas faire ca avec ofstream ? (Je reserve ma place à l'hsoto ? C'est Alzheimervous pensez ? :/ :'()

Reply

Marsh Posté le 03-08-2004 à 15:23:17    

ben tu aboutis a un truc illisible si tu n'écris pas des caractères :) (ou alors que tu écrit dans un code que notepad ne comprend pas)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-08-2004 à 15:23:35    

char cArray[2] = {'a', 'b'};
  ofs.write( ( char* ) cArray, 4 ); // Exactly 4 bytes written
 
 
cast inutile, et ça plante.   ofs.write(cArray, sizeof cArray)

Reply

Marsh Posté le 03-08-2004 à 15:30:53    

Masklinn a écrit :

ben tu aboutis a un truc illisible si tu n'écris pas des caractères :) (ou alors que tu écrit dans un code que notepad ne comprend pas)


Donc finalement si je veux que ca soit illisible c'est à moi meme de gerer ca et de transformer mes données à ecrie avant de remplir le fichier, il n'y a pas de méthode toute faite pour ca... :jap:
 

Taz a écrit :

char cArray[2] = {'a', 'b'};
  ofs.write( ( char* ) cArray, 4 ); // Exactly 4 bytes written
 
 
cast inutile, et ça plante.   ofs.write(cArray, sizeof cArray)


Effectivement le cast ne sert à rien, mais c'est parcequ'au debut j'avais un tableau d'entier, mais j'ai changé juste après et j'ai oublié de l'enlever. :ange: Et sinon vi le "4" est très moche, mais c'est du copié collé du code de msdn, et en plus il contient des erreurs comme le nom d'une variable éronné... :/
 
Et sinon si j'utilise la methode writeFile de l'API Win32 (de toute facon je ne compte pas porter le prog sur un autre OS alors après tout pourquoi pas... [:spamafote]) il va aussi m'ecrire ca de la meme facon ? (pas très clair non plus sur ce point msdn je trouve... :ange:)


Message édité par Jesus Army le 03-08-2004 à 15:31:37
Reply

Marsh Posté le 03-08-2004 à 15:31:15    

c'était pas la question taz ;)
(même si ta remarque est vraie et que les mecs de la MSDN codent comme des pieds)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-08-2004 à 15:37:31    

le problème c'est que dans l'exemple, sizeof cArray == 2 et pas 4

Reply

Marsh Posté le 03-08-2004 à 15:41:05    

Vivi beh ca c'est msdn, il doivent aimer mettre des espaces en plus... [:spamafote] :D
 
Parceque sinon mon problème est tout bete, c'est que je fais un ptit pendu et que j'aimerais que les mots à trouver ainsi que leurs indices et autres paramètres les concernant ne soit pas accessibles aussi facilement qu'avec notepad, parceque sinon c'est plutot facile... :ange: :ange: (quoi que vu qu'il devrait y avoir 2 bon milliers d'enigmes il va pitètre faire la tronche à l'ouverture notepad :D)


Message édité par Jesus Army le 03-08-2004 à 15:41:48
Reply

Marsh Posté le 03-08-2004 à 15:41:42    

effectivement il a oublié de convertir la taille en passant d'un int[] au char[]
 

Citation :

quoi que vu qu'il devrait y avoir 2 bon milliers d'enigmes il va pitètre faire la tronche à l'ouverture notepad


bof j'ouvre des .txt de 60Mo au notepad :)  
(c'est gros des logs mensuels de MMORPG)


Message édité par masklinn le 03-08-2004 à 15:43:03

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-08-2004 à 15:41:42   

Reply

Marsh Posté le 03-08-2004 à 16:15:05    

Roh le mechant notepad ! :o (Tu relis tous tes logs avant de t'endormir c'est ca ? :D)
 
C'est vrai qu'avant il penait dès que la taille du fichier se comptait en Mo mais maintenant il s'en sort plutot pas mal...
 
Sinon si je convertit mon tableau de char en tableau d'int et que j'enregistre comme ca et qu'à la lecture je fais l'inverse, ca fera ce que je demande mais n'est-ce pas une façon un peu trop bricolage limite pas belle toute horrible de le faire ? :/


Message édité par Jesus Army le 03-08-2004 à 16:15:35
Reply

Marsh Posté le 03-08-2004 à 16:23:54    

nana notepad il pète toujours pour ouvrir des fichiers texte de 60Mo :D
 
mais bon il y arrive si on lui laisse le temps


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 03-08-2004 à 16:29:14    

faut être patient aussi... :/ [:tinostar]
 
Sinon le mechant notepad si j'enregistre ma chaine de caractère en ecrivant en mode binaire le code ascii de chaque lettre il me retrouve quand meme ce qui est ecrit mais avec 3 espaces entre chaque caractère... :o Bon je peux modifier le code ascii au passage vers un entier et l'inverse quand je lit mon fichier mais ca m'a pas l'air très eleguant comme methode... :/


Message édité par Jesus Army le 03-08-2004 à 16:29:27
Reply

Marsh Posté le 03-08-2004 à 17:28:48    

Et sinon, une petite autre question, (parceque j'etais en train de tester mais je me créé d'autres problèmes du coup par la meme occaz alors tant qu'à faire si ca ne sert à rien autant que je m'arrete là... :ange:) si je donne un pointeur vers une instance de classe à la methode write, elle va faire la tete non ?

Reply

Marsh Posté le 03-08-2004 à 17:34:26    

Jesus Army a écrit :

Et sinon, une petite autre question, (parceque j'etais en train de tester mais je me créé d'autres problèmes du coup par la meme occaz alors tant qu'à faire si ca ne sert à rien autant que je m'arrete là... :ange:) si je donne un pointeur vers une instance de classe à la methode write, elle va faire la tete non ?


 
Non, aucun problème tant que tu n'essaye pas d'écrire trop de données. Par contre, il ne faut pas ( vaut mieux pas ) essayer de lire le fichier obtenu et esperrer que ça marche :D

Reply

Marsh Posté le 03-08-2004 à 17:37:59    

ah vi donc dans ce cas l'interet est plutot limité alors... :ange: :D
 
Et avec une structure ca irait mieux ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed