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

Messages postés
536
Date d'inscription
mercredi 27 avril 2005
Statut
Membre
Dernière intervention
22 août 2008
- - Dernière réponse : 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
-
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
-
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
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.
cs_mogador
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
TeLeTUbIz
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
cs_mimou20052005
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)
bboygab
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
TeLeTUbIz
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 ?
bboygab
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 .
TeLeTUbIz
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é :)
MuPuF
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 ...
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
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
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
MuPuF
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
ctx_man
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);
}
}
}
vecchio56
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
cosmobob
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.
MuPuF
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 ...
vecchio56
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[]!
TeLeTUbIz
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.
MuPuF
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 ;-)
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1 -
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
1 -
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
-
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 ...