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

Signaler
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008
-
Messages postés
2
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2010
-
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

Messages postés
2
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
28 novembre 2010

Bonjour Mr , Je veux connaitre comment modifier dans un fichier et merci d'avance ....
Messages postés
33
Date d'inscription
mercredi 18 octobre 2000
Statut
Membre
Dernière intervention
4 janvier 2010

j'ai essayé ma ca maeche pas je suis encore débutent en language c
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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.
Messages postés
33
Date d'inscription
mercredi 18 octobre 2000
Statut
Membre
Dernière intervention
4 janvier 2010

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
Messages postés
215
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
25 septembre 2010

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
Messages postés
1
Date d'inscription
jeudi 23 juin 2005
Statut
Membre
Dernière intervention
1 juillet 2005

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)
Messages postés
11
Date d'inscription
jeudi 12 mai 2005
Statut
Membre
Dernière intervention
16 juin 2005

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
Messages postés
215
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
25 septembre 2010

hein ?
concatener les fichiers dans une string ? c'est ca ?
Messages postés
11
Date d'inscription
jeudi 12 mai 2005
Statut
Membre
Dernière intervention
16 juin 2005

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 .
Messages postés
215
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
25 septembre 2010

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é :)
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

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 ...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Et avec toutes ces lib, si on n'a pas pu ouvrir le fichier, il n'a pas de taille ???
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
T'as peut être pas bien compris ce qu'a dit cosmobob, relis bien le début à haute voix
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

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
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

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);
}
}
}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
706
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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.
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

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 ...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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[]!
Messages postés
215
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
25 septembre 2010

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.
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

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 ;-)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
C ANSI ou C++
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Mupuf > cf BFichierIni ds mes publications
TeLeTUbIz> cf BFichier

idem;

dans les bxxx:
http://steph.dall.online.fr/MP
++
Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008

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 ...