Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

déplacer un morceau de fichier de taille connue

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


size_t size=500;
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

10 réponses

1 2 3
Avatar
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()?

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


Avatar
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()?



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




Avatar
Marc G
merci,
je vais regarder ce que fait readsome, que je ne connaissait pas
Avatar
Jean-Marc Bourguet
Michael DOUBEZ writes:

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


Avatar
Fabien LE LEZ
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());

Avatar
Michael DOUBEZ
Michael DOUBEZ writes:

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



Avatar
Jean-Marc Bourguet
Michael DOUBEZ writes:

Michael DOUBEZ writes:

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




Avatar
James Kanze
On Nov 13, 9:06 pm, Jean-Marc Bourguet wrote:
Michael DOUBEZ writes:
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



Avatar
James Kanze
On Nov 13, 1:13 pm, "Marc G" wrote:
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

Avatar
Michael DOUBEZ
Michael DOUBEZ writes:

Michael DOUBEZ writes:

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





1 2 3