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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

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

n°623878
terminator​_t800
Posté le 28-01-2004 à 15:13:21  profilanswer
 

sous windows.
merci.


Message édité par terminator_t800 le 28-01-2004 à 15:15:53
mood
Publicité
Posté le 28-01-2004 à 15:13:21  profilanswer
 

n°623893
Taz
bisounours-codeur
Posté le 28-01-2004 à 15:22:39  profilanswer
 

avec les fonction standard std::remove et la copie, ben à la main avec différentes variantes

n°623898
Taz
bisounours-codeur
Posté le 28-01-2004 à 15:28:19  profilanswer
 

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

n°623906
terminator​_t800
Posté le 28-01-2004 à 15:35:28  profilanswer
 

ok merci
mais c quelle librarie précisément qui se charge de copier ou supprimer le fichier, c'est cstdlib ?

n°623919
Taz
bisounours-codeur
Posté le 28-01-2004 à 15:41:11  profilanswer
 

je sais pas ce que c'est qu'une « librarie »

n°623937
void_ppc
Posté le 28-01-2004 à 15:49:03  profilanswer
 

indice : s/librairie/bibliothèque/g

n°623940
chrisbk
-
Posté le 28-01-2004 à 15:49:54  profilanswer
 

taz a écrit :

je sais pas ce que c'est qu'une « librarie »


 
ca t'amuses tant que ca de faire ton enculeur de mouches ?

n°623950
Taz
bisounours-codeur
Posté le 28-01-2004 à 15:53:43  profilanswer
 

chrisbk a écrit :


 
ca t'amuses tant que ca de faire ton enculeur de mouches ?

bah oui, je sors le code correct, alors je me le permets ... et pi c'était ça ou RTFM :D

n°624018
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 16:55:34  profilanswer
 

if(!in or !out)
 
c la surcharge de quel operateur qui permet de faire ca ??
 
edit :
et puis or ?
chez moi ca compile pas ...
 
if(!in.good() || !out.good())
 
p-e ?


Message édité par blackgoddess le 28-01-2004 à 16:58:59

---------------
-( BlackGoddess )-
n°624023
Taz
bisounours-codeur
Posté le 28-01-2004 à 16:59:10  profilanswer
 

sur c cas présent, c'est operator!

mood
Publicité
Posté le 28-01-2004 à 16:59:10  profilanswer
 

n°624025
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:00:00  profilanswer
 

t'as as besoin de good ou de bad, tu veux utiliser if(in) ou if(!in)
 
operator void * et operator!

n°624028
chrisbk
-
Posté le 28-01-2004 à 17:00:57  profilanswer
 

taz a écrit :

t'as as besoin de good ou de bad, tu veux utiliser if(in) ou if(!in)
 
operator void * et operator!


stun brin porcho, je trouve

n°624030
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:01:14  profilanswer
 

non pas du tout pourquoi ?

n°624031
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:02:08  profilanswer
 

personne pour me dire  
« Taz t'es un dieu, tu manipules les streambuf comme personne » ?

n°624032
chrisbk
-
Posté le 28-01-2004 à 17:02:45  profilanswer
 

bah au final tu sais meme plus ce que tu test. Chui pas contre la surcharge d'operateur, mais la ca me parait abusé, une fonction serait plus claire.

n°624037
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:03:47  profilanswer
 

bah si tu sais ce que tu testes : y a plusieurs façons de le faire, mais la sémantique est là même, c'est ça l'important. je trouve ça super élégant

n°624039
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 17:04:40  profilanswer
 

or existe pas chez moi, c'est un standard ?


Message édité par blackgoddess le 28-01-2004 à 17:05:12

---------------
-( BlackGoddess )-
n°624041
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:05:47  profilanswer
 

si or est même un mot clef.
également standard

n°624043
chrisbk
-
Posté le 28-01-2004 à 17:06:11  profilanswer
 

if (in). ca test quoi ? s'il a pu ouvrir le fichier ou s'il y a encore des octets a lire dans le bouzin ? je trouve ca trop vague. Enfin bon rien me force a utiliser ca non plus, je sais

n°624046
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:07:13  profilanswer
 

ça teste si le flux est ok. à la moindre erreur, ça échoue

n°624048
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 17:07:44  profilanswer
 

sinon apparement pour le !in ca serait la surcharge de l'operateur bool :
 
operator bool() const
{
...
}


---------------
-( BlackGoddess )-
n°624055
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:09:30  profilanswer
 

ouais ça peut dépendre, les deux existent sans doute (j'ai pas le papier sous la main)
ton implémentation est comme ça ?

n°624067
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 17:13:59  profilanswer
 

oui (stl de ms)


---------------
-( BlackGoddess )-
n°624074
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 17:14:57  profilanswer
 

tu pourrait me montrer un exemple avec la surcharge de ! et void* ? parce que je vois pas trop comment c'est fait :(


---------------
-( BlackGoddess )-
n°624084
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:23:36  profilanswer
 

non, operator bool n'est pas standard
 
 
un truc bidon
 

Code :
  1. struct Foo
  2. {
  3.   int state;
  4.   const int value;
  5.   Foo(int s, int v)
  6.     : state(s),
  7.       value(v)
  8.   {}
  9.   bool operator!() const
  10.   {
  11.     return state!=value;
  12.   }
  13.   operator void * ()
  14.   {
  15.     return this;
  16.   }
  17. };


 
 
 

Code :
  1. #include <iostream>
  2. #include <iomanip>
  3. int main()
  4. {
  5.   Foo f(25, 42);
  6.   std::cout << std::boolalpha << !f << std::endl;
  7.  
  8.   f.state = f.value;
  9.   std::cout << std::boolalpha << !f << std::endl;
  10.   std::cout << f << std::endl;
  11. }


Message édité par Taz le 28-01-2004 à 17:36:24
n°624095
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 17:31:28  profilanswer
 

bien, ok merci :)


---------------
-( BlackGoddess )-
n°624097
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:32:48  profilanswer
 

après
 
!f ou not f

n°624098
jagstang
Pa Capona ಠ_ಠ
Posté le 28-01-2004 à 17:33:40  profilanswer
 

Taz t'es un dieu, tu manipules les streambuf comme personne :o

n°624102
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:37:49  profilanswer
 

merci :o

n°624107
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 17:44:15  profilanswer
 

(not existe pas non plus chez moi)


---------------
-( BlackGoddess )-
n°624110
Taz
bisounours-codeur
Posté le 28-01-2004 à 17:47:27  profilanswer
 

bah t'as qu'à avoir un compilateur C++
 
les versions littérales d'un tas d'opérateurs sont standards depuis quasiment le départ. et C99 enf ait des macros standards

n°624129
skylight
Made in France.
Posté le 28-01-2004 à 17:56:32  profilanswer
 

taz a écrit :

je sais pas ce que c'est qu'une « librarie »

:sarcastic:

n°624218
Taz
bisounours-codeur
Posté le 28-01-2004 à 19:34:24  profilanswer
 

finalement on a appris plein de trucs sur ce topic qui me semblait d'abord pourri :sol:

n°624225
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 19:41:28  profilanswer
 

uhu :)
 
sinon, pour en revenir au sujet ,si tu veux sous windows de l'api windows sans portabilité possible, la msdn est ton amie :
 
DeleteFile : http://msdn.microsoft.com/library/ [...] tefile.asp
CopyFile : http://msdn.microsoft.com/library/ [...] pyfile.asp

n°624227
Taz
bisounours-codeur
Posté le 28-01-2004 à 19:47:00  profilanswer
 

et boost cupède t'en fait quoi ?
 
cela dit sur un truc simple comme ça (voir mon code), pas la peine de passer par autre chose

n°624230
blackgodde​ss
vive le troll !
Posté le 28-01-2004 à 19:58:25  profilanswer
 

tiens voui :)
 
je viens de voir boost.filesystem :)
 
jme demande comment ca marche sous windows qui fonctionne avec des lettres de lecteur et pas des points de montage ...

n°624232
Taz
bisounours-codeur
Posté le 28-01-2004 à 20:00:12  profilanswer
 

grâve a un superbe surcahrge d'opérateur et d'effet de bords

n°662624
docmaboul
Posté le 04-03-2004 à 11:56:10  profilanswer
 

Taz a écrit :

avec les fonction standard std::remove et la copie, ben à la main avec différentes variantes


 
Certainement pas. On utilise l'API win32 :
 
CopyFile et DeleteFile.

n°662637
Taz
bisounours-codeur
Posté le 04-03-2004 à 12:03:16  profilanswer
 

DocMaboul a écrit :


 
Certainement.

avant de upper des vieux trucs, tu pourrais le lire en entier au moins :o
merci de ton intervention inutile


Message édité par Taz le 04-03-2004 à 12:03:29
n°662644
docmaboul
Posté le 04-03-2004 à 12:05:55  profilanswer
 

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   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

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