Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1095 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

comment copier ou supprimer un fichier sur le disque dur en c++ ?

n°662644
docmaboul
Posté le 04-03-2004 à 12:05:55  profilanswer
 

Reprise du message précédent :

Taz a écrit :

moi j'aime bien
 

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <fstream>
  4. int main(int argc, char *argv[])
  5. {
  6.   if (argc != 3)
  7.     return 0;
  8.   // en binaire pour certains systèmes  
  9.   std::ifstream in(argv[1], std::ios::binary);
  10.   std::ofstream out(argv[2], std::ios::binary);
  11.   if(!in or !out)
  12.     return 0;
  13.   out << in.rdbuf();
  14.   // être sur que tout est terminé avant la suppression
  15.   out.close();
  16.   std::remove(argv[2]);
  17. }




 
C'est sûr que c'est joli sauf que c'est nul (t'as appris le C++ sur une calculatrice ou quoi ?)
 
Déjà, les performances de ton machin dépendent de l'implementation de la stl. Avec celle fournie par le VC de krosoft, là, tu fais une copie octet par octet. Over top ridicule.
 
Ensuite, en imaginant que tu prennes une implémentation un peu plus sérieuse, il faut savoir que la plupart utilisent un buffer de 8Ko. En programmant soit-même une boucle avec un buffer de 64 Ko, tu vas réduire le temps d'exécution de ta copie d'un rapport de 1/3 à 1/2 sur un fichier un tant soit peu conséquent.
 
Pour finir, j'ai bien aimé le gros bug dans ton exemple : pas de test d'erreur pour savoir si l'écriture s'est correctement déroulée.
Si pour une raison x ou y, une erreur survient, on tombe tout droit dans le remove sans avoir réalisé de copie correcte du fichier d'origine.
Moralité : on perd ses données.
 

mood
Publicité
Posté le 04-03-2004 à 12:05:55  profilanswer
 

n°662651
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:08:33  profilanswer
 

t'es un peu à côté de la plaque, j'espère que tu t'en rends compte ?
 
edit: bon je vous le laisse


Message édité par Taz le 04-03-2004 à 12:11:54
n°662657
docmaboul
Posté le 04-03-2004 à 12:12:46  profilanswer
 

Taz a écrit :

t'es un peu à côté de la plaque, j'espère que tu t'en rends compte ?


 
C'est sûr que proposer une méthode pour potentiellement copier un fichier octet par octet à un newbie, c'est vachement dans la plaque.

n°662660
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-03-2004 à 12:16:27  profilanswer
 

Taz a écrit :

out << in.rdbuf();  


 
Quand on fait ça, est-ce qu'il commence à donner à out la taille de in avant de faire la copie ? Parce que sinon bonjour la fragmentation sous Windows :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°662665
docmaboul
Posté le 04-03-2004 à 12:22:33  profilanswer
 

antp a écrit :


 
Quand on fait ça, est-ce qu'il commence à donner à out la taille de in avant de faire la copie ? Parce que sinon bonjour la fragmentation sous Windows :o


 
Je ne pense pas mais de toute facon la question ne se pose pas. On utilise l'api win32 qui n'a pas été écrite pour les chiens.
 
(le reste, c'était juste pour emmerder un peu taz qui prend un peu trop de haut les newbies à mon goût).

n°662667
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:23:06  profilanswer
 

DocMaboul a écrit :


 
C'est sûr que proposer une méthode pour potentiellement copier un fichier octet par octet à un newbie, c'est vachement dans la plaque.

mais tu fais chier. tu veux pas lire le topic d'abord ? on l'as donné ta putain de solution windows, seulement, désolé, j'en ai profité pour montrer une manière portable de copier un fichier et faire une petite intro au streambuf. maintenant, pardon, t'es trop bête pour avoir compris, ça j'aurais du mettre un gros panneau clignotant, et désolé pour toi si ton système de fichiers est à gerber, alors tes considérations de performances, je m'en fiche un peu. quand à tes méthodes Win32, si tu pouvais en voir les sources, ça démystifierais beaucoup et t'aurais de grosses suprises.
mais vu que t'es intelligent, libre à toi de faire grandir le streambuf pour avoir une taille de buffer qui te convient.
et mon code va bien, manque juste 1/2 contrôles d'erreurs, mais là n'étais pas la question comme déjà dit

n°662670
docmaboul
Posté le 04-03-2004 à 12:25:57  profilanswer
 

Taz a écrit :

mais tu fais chier. tu veux pas lire le topic d'abord ? on l'as donné ta putain de solution windows, seulement, désolé, j'en ai profité pour montrer une manière portable de copier un fichier et faire une petite intro au streambuf. maintenant, pardon, t'es trop bête pour avoir compris, ça j'aurais du mettre un gros panneau clignotant, et désolé pour toi si ton système de fichiers est à gerber, alors tes considérations de performances, je m'en fiche un peu. quand à tes méthodes Win32, si tu pouvais en voir les sources, ça démystifierais beaucoup et t'aurais de grosses suprises.
mais vu que t'es intelligent, libre à toi de faire grandir le streambuf pour avoir une taille de buffer qui te convient.
et mon code va bien, manque juste 1/2 contrôles d'erreurs, mais là n'étais pas la question comme déjà dit


 
Marrant. T'es vachement plus tatillon quand le mec sait pas trop coder.
 
Et ca ne change rien que ta méthode portative repose entièrement sur l'implementation de la stl.
 
Un peu comme si tu acceptais de prendre le risque qu'un browser "portable" demande à avoir une page octet par octet...

n°662672
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:28:01  profilanswer
 

DocMaboul a écrit :


Et ca ne change rien que ta méthode portative repose entièrement sur l'implementation de la stl.
 
Un peu comme si tu acceptais de prendre le risque qu'un browser "portable" demande à avoir une page octet par octet...

mais ou t'as vu ça ? j'y peux quoi si la STL livrée avec VC6 est à vomir ? toutes les implémentations de STL que j'utilise sont raisonnablement efficaces et ça fonctionne très bien. ou t'es vu qu' y avait de la copie par octet ? ce n'est pas parceque jusqu'à aujourd'hui tu ne savais pas ce qu'étais un streambuf (as tu seulement déjà utiliser un stream?) qu'il vaut rconter des conneries

n°662673
jagstang
Pa Capona ಠ_ಠ
Posté le 04-03-2004 à 12:28:31  profilanswer
 

Troll ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°662675
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:29:38  profilanswer
 
mood
Publicité
Posté le 04-03-2004 à 12:29:38  profilanswer
 

n°662679
docmaboul
Posté le 04-03-2004 à 12:31:00  profilanswer
 

Je sais pas ce veut dire "rconter".
 
Mais si tu veux j'ai une petite histoire que tu aimeras sûrement.
 
Ce sont deux fous à la cantine de l'hôpital psychiatrique.
Le premier demande au deuxième : "tu peux me passer le sel ?".
Le deuxième répond : "oui, je le peux".
Et le premier de conclure : "merci, c'est tout ce que je voulais savoir".

n°662695
jagstang
Pa Capona ಠ_ಠ
Posté le 04-03-2004 à 12:38:50  profilanswer
 

ouaaah super Doc. Prends tes cachets maintenant et cesse de pourrir ce topic.  
a+


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°662699
chaica
Posté le 04-03-2004 à 12:39:49  profilanswer
 

INFORMATIONS GENERALES
Pseudo : DocMaboul  
Image associée :
Ville d'origine : Ajaccio  
N° ICQ : Aucun
Date de naissance : 00-00-0000
Site perso :
Passion(s) :
Métier / Occupations :
 
INFORMATIONS RELATIVES AU FORUM  
Statut : Membre  
Smilie personnalisé :
Date d'arrivée sur le forum : le 03-03-2004  
Nombre de messages postés : 7 ->soit les messages présents sur ce topic
Date du dernier message : le 04-03-2004 à 12:31:00
 
Qui est-ce qui s'amuse là hmm? :D


Message édité par chaica le 04-03-2004 à 12:40:33
n°662701
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:40:29  profilanswer
 

yup

n°662724
jagstang
Pa Capona ಠ_ಠ
Posté le 04-03-2004 à 12:51:18  profilanswer
 

c'est pour ça que j'ai crié au troll.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°662725
docmaboul
Posté le 04-03-2004 à 12:52:45  profilanswer
 

Taz a écrit :

mais ou t'as vu ça ? j'y peux quoi si la STL livrée avec VC6 est à vomir ? toutes les implémentations de STL que j'utilise sont raisonnablement efficaces et ça fonctionne très bien. ou t'es vu qu' y avait de la copie par octet ? ce n'est pas parceque jusqu'à aujourd'hui tu ne savais pas ce qu'étais un streambuf (as tu seulement déjà utiliser un stream?) qu'il vaut rconter des conneries


 
Je sais que tu n'y peux rien. C'est juste que comme toi, et contrairement à moi, tu connais très bien les streambufs, je suis étonné de constater que tu ne saches pas que ton code est portable, portable et demi.
 
Sinon pour voir ça, tu t'installes le VC de krosoft, tu fais un test sur un fichier de 100Mo et tu vas matter un film le temps que ton fichier soit copié.

n°662729
docmaboul
Posté le 04-03-2004 à 12:55:05  profilanswer
 

JagStang a écrit :

c'est pour ça que j'ai crié au troll.  


 
Qu'ils sont méchants...
 
J'ai quand même été répondre à un pauve malheureux qui ne comprenait pas pourquoi son sha1 en base 16 n'avait pas une trogne de sha1.
 
J'ai bien lu d'autres vieux topics sans (bonne) réponse mais je ne vais pas continuer à faire mon troll...
 
Bien à vous et belle journée à tous.

n°662730
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:55:22  profilanswer
 

DocMaboul a écrit :


C'est juste que comme toi, et contrairement à moi, tu connais très bien les streambufs, je suis étonné de constater que tu ne saches pas que ton code est portable, portable et demi.

pour plus d'incompréhension une fois de plus
 

DocMaboul a écrit :


Sinon pour voir ça, tu t'installes le VC de krosoft, tu fais un test sur un fichier de 100Mo et tu vas matter un film le temps que ton fichier soit copié.

même si je le voulais, je pourrais pas ...


Message édité par Taz le 04-03-2004 à 12:55:33
n°662731
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:56:16  profilanswer
 

DocMaboul a écrit :


 
Qu'ils sont méchants...
 
J'ai quand même été répondre à un pauve malheureux qui ne comprenait pas pourquoi son sha1 en base 16 n'avait pas une trogne de sha1.

laisse not' copaing kyle tranquil twa  :kaola:

n°662734
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-03-2004 à 12:59:35  profilanswer
 

Un peu de calme svp, sinon je ferme, surtout que la réponse a été donnée.

n°662736
Taz
bisounours-codeur
Posté le 04-03-2004 à 13:00:31  profilanswer
 

alors ferme

n°2162609
pepin_et_g​renouille
Posté le 05-11-2012 à 20:57:21  profilanswer
 

hello
j'essaye cette technique

Citation :

std::ifstream in(t1.c_str(), std::ios::binary);
  std::ofstream out(t2.c_str(), std::ios::binary);
  if(!in or !out)
    return ;
  out << in.rdbuf();


mais je n'ai rien dans mon dossier de destination. Le disque se met en marche pour lire les fichiers d'origine, on voit une pause sur la console (le temps de copier et de passer au fichier suivant) et tout et tout mais, pouf, rien à l'arrivée
j'utilise dev c++
pour l'instant j'essaye de copier un seul fichier en statique:
 
   t1 = "o:/lalalala/life.pof";
   t2 = "o:/lalalala/life2.paf";

n°2162611
Terminapor
I'll see you rise.
Posté le 05-11-2012 à 21:08:18  profilanswer
 

T'es sûr que tes 2 fichiers existent ? T'as essayé avec les '/' dans l'autre sens ? ('\\')


---------------
Perhaps you don't deserve to breathe
n°2162622
pepin_et_g​renouille
Posté le 05-11-2012 à 23:13:55  profilanswer
 

oui
en fait je m'aperçois que j'ai un problème: certaines fenêtres comme celles lancées par mon devc++ sont entourées de rouge (et elles ne l'étaient pas au début, je ne sais pas ce qui s'est passé entre temps). J'ai désactivé l'antivirus mais c'est toujours là... Bref, ça devrait marcher, je vais essayer sous un autre windows

n°2162687
gilou
Modérateur
Modzilla
Posté le 06-11-2012 à 11:31:17  profilanswer
 

docmaboul a écrit :

Avec celle fournie par le VC de krosoft, là, tu fais une copie octet par octet. Over top ridicule.

L'implem de Dinkumware est mauvaise?
Il y a une 15-aine d'années, je leur avais acheté des librairies C (ou C++, je sais plus) performantes et de bonne qualité.
Mais là, quand on va chez eux, le site est réduit à une seule page, ce qui est mauvais signe, car on n'a plus une présentation détaillée de leurs librairies, et ils ne semblent plus vendre aux particuliers.
EDIT: ah, ça datait de 2004, quand c'était pas l'implem de Dinkumware dans VC, je comprends mieux.
A+,


Message édité par gilou le 06-11-2012 à 11:33:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[VB] Problème avec la lecture d'un fichiereffacement disque dur
[HTML/ Flash] Lire en Live un fichier depuis une page HTML, ou Flash ?Gestion de fichier des repertoires
Pb avec le fichier VBA6.dll sur ExcelEnregistrer des données dans un fichier texte ?
[PHP] Exécuter le Code d'un Fichier Extérieur dans une Page PHP ?[PHP] Inclure un fichier cgi apres execution de celui-ci
Afficher un fichier txt dans page HTML avec mise à jour automatique ..comment renommer un fichier uploadé sans perdre son extension?
Plus de sujets relatifs à : comment copier ou supprimer un fichier sur le disque dur en c++ ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR