déplacer un morceau de fichier de taille connue

Le
Marc G
je voudrais savoir si mon code est correct, où s'il existe une autre méthode
file_ est un fstream


size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);

// je me balade dans le fichier à l'endroit où je veux écrire

the_file.write(ptr,size);
delete[] ptr;

merci à vous
Marc
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michael DOUBEZ
Le #312812
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream


size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);


Utilises gcount() pour connaitre le nombre d'octet effectivement lus ou
utilises readsome()?

streamsize sz=the_file.read(ptr,size);
assert(sz==size);//ou gere le cas sz<size



// je me balade dans le fichier à l'endroit où je veux écrire

the_file.write(ptr,size);


Peut être checker si badbit/failbit est levé.

delete[] ptr;

merci à vous
Marc


Michael DOUBEZ
Le #312811
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream


size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);


Utilises gcount() pour connaitre le nombre d'octet effectivement lus ou
utilises readsome()?



//oups
streamsize sz=the_file.readsom(ptr,size);

assert(sz==size);//ou gere le cas sz<size



// je me balade dans le fichier à l'endroit où je veux écrire

the_file.write(ptr,size);


Peut être checker si badbit/failbit est levé.

delete[] ptr;

merci à vous
Marc




Marc G
Le #312810
merci,
je vais regarder ce que fait readsome, que je ne connaissait pas
Jean-Marc Bourguet
Le #312809
Michael DOUBEZ
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream
size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);


Utilises gcount() pour connaitre le nombre d'octet effectivement lus ou
utilises readsome()?


Pourquoi utiliser readsome dans ce contexte? Ca n'a pas tellement
d'intérêt en dehors des stream que l'on sait interactive il me semble.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Fabien LE LEZ
Le #312808
On Tue, 13 Nov 2007 13:13:00 +0100, "Marc G"
char* ptr=new char[size];


std::vector<char> buf (size);

the_file.read(ptr,size);


read (&buf[0], buf.size());

Michael DOUBEZ
Le #312807
Michael DOUBEZ
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream
size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);
Utilises gcount() pour connaitre le nombre d'octet effectivement lus ou

utilises readsome()?


Pourquoi utiliser readsome dans ce contexte? Ca n'a pas tellement
d'intérêt en dehors des stream que l'on sait interactive il me semble.


Pour etre coherent avec une lecture en fin de fichier.
Si il connait effectivement le nombre d'octets accessibles, il peut se
contenter de savoir si le read a reussit ou non.

Michael



Jean-Marc Bourguet
Le #312768
Michael DOUBEZ
Michael DOUBEZ
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream
size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);
Utilises gcount() pour connaitre le nombre d'octet effectivement lus ou

utilises readsome()?
Pourquoi utiliser readsome dans ce contexte? Ca n'a pas tellement

d'intérêt en dehors des stream que l'on sait interactive il me semble.


Pour etre coherent avec une lecture en fin de fichier.


readsome ne fait que lire ce qui a deja ete bufferise dans le streambuf.
J'ai du mal a voir la coherence, surtout quand on considere qu'il parle de
faire des mouvements avant, ce qui impliquerait que rien n'est bufferise a
ce moment.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org




James Kanze
Le #312767
On Nov 13, 9:06 pm, Jean-Marc Bourguet
Michael DOUBEZ
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream
size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);


Utilises gcount() pour connaitre le nombre d'octet
effectivement lus ou utilises readsome()?


Pourquoi utiliser readsome dans ce contexte?


Sans doute pour la même raison que beaucoup de gens utilisent
rdbuf()->in_avail() : parce qu'ils en ont mal compris la
sémantique.

Ca n'a pas tellement d'intérêt en dehors des stream que l'on
sait interactive il me semble.


Même quand on connaît le flux interactif, je ne suis pas sûr de
son utilité. Après un getline(), par exemple, il y a de fortes
chances qu'elle ne lit rien (au moins sous Unix ou Windows). Et
si l'utilisateur est assez pervers pour entrer des lignes plus
longues que le buffer, il risque de ne pas fonctionner comme on
veut non plus.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



James Kanze
Le #312766
On Nov 13, 1:13 pm, "Marc G"
je voudrais savoir si mon code est correct, où s'il existe une autre m éthode
file_ est un fstream

size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);

// je me balade dans le fichier à l'endroit où je veux écrire

the_file.write(ptr,size);
delete[] ptr;


Comme Fabien, j'utiliserais plutôt std::vector<char>, voire même
std::string.

Il faut, aussi, gérer les erreurs éventuelles. Si read ne peut
pas lire le nombre de caractères démandés, il positionne
failbit ; c-à-d qu'il considère que la lecture a échouée. Si
c'est ça que tu veux -- c-à-d que tu sais qu'il doit y avoir
size caractères à l'endroit où tu te trouves, et que sinon, le
fichier est mal formatté -- c'est bon. Si c'est plutôt une
lecture spéculative, où tu ne sais pas combien de caractères
restent dans le fichier à cet endroit, mais tu veux les traiter
tous, jusqu'à concurrence de size, si le flux se trouve dans un
état d'erreur après la lecture, il faut appeler gcount() pour
savoir combien de caractères ont été réelement lus ; si c'est
0, c'est effectivement une erreur, mais sinon, tu as lu avec
succès autant de caractères.

Et évidemment, si le flux se trouve en état d'erreur, et tu veux
encore en faire quelque chose, il ne faut pas oublier d'effacer
l'erreur avec un appel à clear().

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Michael DOUBEZ
Le #312765
Michael DOUBEZ
Michael DOUBEZ
je voudrais savoir si mon code est correct, où s'il existe une autre
méthode
file_ est un fstream
size_t sizeP0;
char* ptr=new char[size];
the_file.read(ptr,size);
Utilises gcount() pour connaitre le nombre d'octet effectivement lus ou

utilises readsome()?
Pourquoi utiliser readsome dans ce contexte? Ca n'a pas tellement

d'intérêt en dehors des stream que l'on sait interactive il me semble.
Pour etre coherent avec une lecture en fin de fichier.



readsome ne fait que lire ce qui a deja ete bufferise dans le streambuf.
J'ai du mal a voir la coherence, surtout quand on considere qu'il parle de
faire des mouvements avant, ce qui impliquerait que rien n'est bufferise a
ce moment.


Je n'ai pas compris ce que faisait readsome alors.
Désolé pour le mauvais conseil.

Michael





Publicité
Poster une réponse
Anonyme