[STL] CONNAITRE LA TAILLE D'UN FICHIER ET COPIER DANS UN STRING

MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008 - 8 juin 2005 à 14:53
mhido123 Messages postés 2 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 28 novembre 2010 - 21 févr. 2010 à 18:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31919-stl-connaitre-la-taille-d-un-fichier-et-copier-dans-un-string

mhido123 Messages postés 2 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 28 novembre 2010
21 févr. 2010 à 18:04
Bonjour Mr , Je veux connaitre comment modifier dans un fichier et merci d'avance ....
cs_mogador Messages postés 33 Date d'inscription mercredi 18 octobre 2000 Statut Membre Dernière intervention 4 janvier 2010
28 déc. 2009 à 19:23
j'ai essayé ma ca maeche pas je suis encore débutent en language c
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
28 déc. 2009 à 16:40
Bonjour.
Pas de rapport avec cette source, mais c'est tout simple à faire, en cas.
tu peux ouvrir ton fichier (extension quelconque en enregistrant la correspondance dans un fichier même nom, même extension+.cod par exemple)
fichier in en binaire, sortie en texte, et tu y place la correspondance binaire de chaque caractère hexa lu.
puis destruction du source.
idem pour le recodage dans l'autre centre.(en veillant à prendre des blocs de 16 0/1)
Basique.

Magicalement.
cs_mogador Messages postés 33 Date d'inscription mercredi 18 octobre 2000 Statut Membre Dernière intervention 4 janvier 2010
19 déc. 2009 à 20:15
Bonjour,

je souhaiterais convertir n'importe quel type de fichier en language C (txt, jpg, avi, exe

...) en fichier binaire ou plutot en fichier texte contenant un suite de 0 et 1. et la meme

chose faire le contraire.



#include <stdio.h>

int main(int argc, char **argv) {
/*
FILE *fp;
fp=fopen("test.c", "wb");
char x[10]="ABCDEFGHIJ";
fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);
*/

FILE *fp;
fp=fopen("test.c", "rb");
char x[10];//="ABCDEFGHIJ";
fread(x, sizeof(char), 10, fp);

printf("%d================",sizeof(x));
printf("\n");
for(int i=0;i<sizeof(x);i++)
{



printf("%x==========",x[i]);
//printf("\n");
for(int j=7;j>=0;j--)
{


//printf("(%d)",j);
printf("%d",(x[i]>>j)&(255>>7));


}
printf("\n");
}




}





Merci pour votre aide.

sed
Utilisateur anonyme
1 juil. 2005 à 16:02
as tu pensé à faire les include ?
#include <string>
#include <fstream>
#include
using std::string;
using std::ios_base;
using std::ios;
using std::cout;
using std::endl;
using std::fstream;

#include <conio.h> // propre à Visual C++ (sinon getch() existe ailleurs)

ou alors remplacer tout les using par:
using namespace std; // si tu veux faire le bourrin
cs_mimou20052005 Messages postés 1 Date d'inscription jeudi 23 juin 2005 Statut Membre Dernière intervention 1 juillet 2005
1 juil. 2005 à 14:58
je crois que je suis pas initié aux STL
j'ai compilé (vc++ 6.0)le code de TeLeTUbIz et j'ai obtenu ça :
Compiling...
stringf.cpp

D:\ptjc++\fichier_into_string\stringf.cpp(4) : error C2871: 'std' : does not exist or is not a namespace

D:\ptjc++\fichier_into_string\stringf.cpp(19) : error C2653: 'ios_base' : is not a class or namespace name

D:\ptjc++\fichier_into_string\stringf.cpp(19) : error C2065: 'end' : undeclared identifier

D:\ptjc++\fichier_into_string\stringf.cpp(21) : error C2653: 'ios_base' : is not a class or namespace name

D:\ptjc++\fichier_into_string\stringf.cpp(21) : error C2065: 'beg' : undeclared identifier

D:\ptjc++\fichier_into_string\stringf.cpp(26) : error C2065: 'res' : undeclared identifier

D:\ptjc++\fichier_into_string\stringf.cpp(26) : error C2228: left of '.assign' must have class/struct/union type

D:\ptjc++\fichier_into_string\stringf.cpp(30) : error C2065: 'getch' : undeclared identifier
Error executing cl.exe.

fichier_into_string.exe - 8 error(s), 0 warning(s)
bboygab Messages postés 11 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 16 juin 2005
15 juin 2005 à 12:27
non en faite regarde je suis sur un projet ou je dois créer un fichier .dat ou dedans je vai pouvoir mettre plusieur société dedans et chaque société devra avoir plusieur fichier licence 50 au maximum et moi se son ces fichier licence qui me pose problème d'une part je dois en passé plusieur a une societe et d'autre part c fichier licence existe déjà il fau juste que je les assigne a une société voilà si ta une solution ça serait simpa merci
Utilisateur anonyme
15 juin 2005 à 11:58
hein ?
concatener les fichiers dans une string ? c'est ca ?
bboygab Messages postés 11 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 16 juin 2005
15 juin 2005 à 11:22
sinon comment on fait pour assigner plusieurs fichiers de tout type a une chaine de caractère ? j'ai voulu tester avec un tableau à 2 dimentions mais je m'en sors pas merci d'avance .
Utilisateur anonyme
8 juin 2005 à 18:24
oui oui, dslé mon code était pas pour ca.
J'ai zapé les destructions (mais on aurait pu utiliser un std::auto_ptr) et j'ai fait aucune vérification, sur l'ouverture du fichier par exemple. J'ai vraiment fait à l'arrach, dslé :)
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
8 juin 2005 à 17:55
vecchio56: ben dans mon exemple j'ai pas mis l'appel, mais mon appel est le meme que le siens donc, si il dit que la ya plus de fuite, ben ça veut dire que j'en ais pas, je me doutais bien que le compilo fera ça, mais de la a etre sur, ya un grand pas ...
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 juin 2005 à 17:47
Et avec toutes ces lib, si on n'a pas pu ouvrir le fichier, il n'a pas de taille ???
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 17:33
T'as peut être pas bien compris ce qu'a dit cosmobob, relis bien le début à haute voix
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
8 juin 2005 à 17:31
COSMOBOB:OUF !!! J'ai donc pas de fuite, je me doutais bien que ça marchais comme ça mais n'ayant jamais rien lus dessus ... Merci je suis soulagé lol

vecchio56: Merci, pour ta réponse, je vais me renseigner
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
8 juin 2005 à 17:28
je pense que pour stoquer un fichier dans un tableau le mieu est encore d'utiliser les librairies standard en C :

#include <stdlib> //allocation dynamique
#include <stdio.h> //gestion des fichiers

int main(int argc, char *argv[])
{
FILE *fp;
int taille;
char *fichier;

//Taille du fichier
if(fp = fopen("c:/fichier.ext", "rb"))
{
fseek(fp, 0, SEEK_END);
taille = ftell(fp);
fclose(fp);

//Allocation de la zone memoire
if(fichier = (char*)malloc(taille))
{
//Lecture du fichier
fp = fopen("c:/fichier.ext", "rb");
fread(fichier, 1, taille, fp);
fclose(fp);

//Ecriture du fichier
fp = fopen("c:/fichier.ext", "wb");
fwrite(fichier, 1, taille, fp);
fclose(fp);

//Desallocation (une fois que le fichier n'est
//plus utiliser
free(fichier);
}
}
}
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 17:27
pour les fuites, en général on fait des macro qui permettent de savoir combien on alloue et combien on libère. C'est deja fait avec visual studio
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
8 juin 2005 à 17:22
salut,
oui ya une fuite de memoire dans ton exemple...
pour l'enlever: ou bien tu fais delete[] a l'exterieur de la fonction mid
(par ex:
char* res = Mid("salut", 5, 6);
//traitement
delete [] res;
)

ou bien tu renvoies un std::string a la place d'un char*. Dans ce cas t'auras plus de pb.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
8 juin 2005 à 17:13
ouille j'avais pas vus qu'il l'avait zappé, un coup a vider sa mémoire lol, une fuite comme ça ... Au passage, y'aurai pas un outils savoir si on a des fuites de mémoire ? et aussi une question:

char* Mid(char* text,int pos,int len)
{
retour = new char[len+1];
//Code
return retour;
}

Cette fonction fait-elle une fuite de mémoire ? car je ne fais jamais de delete ...
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 juin 2005 à 17:05
STL pense a tout, mais pas toi. Tu dois vérifier que l'allocation new a bien réussit (imagine un fichier de plusieurs GO et peu de mémoire). Mais c'est un peu le bordel apparemment:

"Lorsqu'il n'y a pas assez de mémoire disponible, les opérateurs new et new[] peuvent se comporter de deux manières selon l'implémentation. Le comportement le plus répandu est de renvoyer un pointeur nul. Cependant, la norme C++ indique un comportement différent : si l'opérateur new manque de mémoire, il doit appeler un gestionnaire d'erreur. [...] L'opérateur new est donc susceptible de lancer une exception std::bad_alloc"

http://casteyde.christian.free.fr/online/cours_cpp/x1968.html

Et puis surtout tu oublies le delete[]!
Utilisateur anonyme
8 juin 2005 à 17:04
Magic_Nono --> oui, mais l'avantage des strings, c'est qu'ils sont standard :)
Donc on l'utilise bcp, et on se pose souvent la question pour trouver la taille d'un fichier.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
8 juin 2005 à 16:47
Lol, pas mal, mais moi je travaille avec des char* (tu vois pourquoi c'est un peu plus chiant lol). String.h, je veux bien mais la je veux TOUT controler (comme cortex). Donc je fini ça et je serais content ;-)
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
8 juin 2005 à 16:34
C ANSI ou C++
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
8 juin 2005 à 16:34
Mupuf > cf BFichierIni ds mes publications
TeLeTUbIz> cf BFichier

idem;

dans les bxxx:
http://steph.dall.online.fr/MP
++
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
8 juin 2005 à 14:53
je fais pareil mais en c, les fichiers en c++ j'ai jamais tenté, j'ai une classe sauvegarde a la ini qui foire un peu lors de la création d'une clée, je vais voir si l'utiliser ne resoudrais pas mon probleme, avec un peu de chance, je vous la posterais car elle est plus sympa a utiliser que le ini de windows qui ne permet meme pas d'écrire direct un integer ...
Rejoignez-nous