comment copier ou supprimer un fichier sur le disque dur en c++ ? - C++ - Programmation
Marsh Posté le 28-01-2004 à 15:22:39
avec les fonction standard std::remove et la copie, ben à la main avec différentes variantes
Marsh Posté le 28-01-2004 à 15:28:19
moi j'aime bien
Code :
|
Marsh Posté le 28-01-2004 à 15:35:28
ok merci
mais c quelle librarie précisément qui se charge de copier ou supprimer le fichier, c'est cstdlib ?
Marsh Posté le 28-01-2004 à 15:49:54
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 ?
Marsh Posté le 28-01-2004 à 15:53:43
chrisbk a écrit : |
bah oui, je sors le code correct, alors je me le permets ... et pi c'était ça ou RTFM
Marsh Posté le 28-01-2004 à 16:55:34
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 ?
Marsh Posté le 28-01-2004 à 17:00:00
t'as as besoin de good ou de bad, tu veux utiliser if(in) ou if(!in)
operator void * et operator!
Marsh Posté le 28-01-2004 à 17:00:57
taz a écrit : t'as as besoin de good ou de bad, tu veux utiliser if(in) ou if(!in) |
stun brin porcho, je trouve
Marsh Posté le 28-01-2004 à 17:02:08
personne pour me dire
« Taz t'es un dieu, tu manipules les streambuf comme personne » ?
Marsh Posté le 28-01-2004 à 17:02:45
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.
Marsh Posté le 28-01-2004 à 17:03:47
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
Marsh Posté le 28-01-2004 à 17:04:40
or existe pas chez moi, c'est un standard ?
Marsh Posté le 28-01-2004 à 17:06:11
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
Marsh Posté le 28-01-2004 à 17:07:13
ça teste si le flux est ok. à la moindre erreur, ça échoue
Marsh Posté le 28-01-2004 à 17:07:44
sinon apparement pour le !in ca serait la surcharge de l'operateur bool :
operator bool() const
{
...
}
Marsh Posté le 28-01-2004 à 17:09:30
ouais ça peut dépendre, les deux existent sans doute (j'ai pas le papier sous la main)
ton implémentation est comme ça ?
Marsh Posté le 28-01-2004 à 17:14:57
tu pourrait me montrer un exemple avec la surcharge de ! et void* ? parce que je vois pas trop comment c'est fait
Marsh Posté le 28-01-2004 à 17:23:36
non, operator bool n'est pas standard
un truc bidon
Code :
|
Code :
|
Marsh Posté le 28-01-2004 à 17:33:40
Taz t'es un dieu, tu manipules les streambuf comme personne
Marsh Posté le 28-01-2004 à 17:44:15
(not existe pas non plus chez moi)
Marsh Posté le 28-01-2004 à 17:47:27
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
Marsh Posté le 28-01-2004 à 17:56:32
ReplyMarsh Posté le 28-01-2004 à 19:34:24
finalement on a appris plein de trucs sur ce topic qui me semblait d'abord pourri
Marsh Posté le 28-01-2004 à 19:41:28
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
Marsh Posté le 28-01-2004 à 19:47:00
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
Marsh Posté le 28-01-2004 à 19:58:25
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 ...
Marsh Posté le 28-01-2004 à 20:00:12
grâve a un superbe surcahrge d'opérateur et d'effet de bords
Marsh Posté le 04-03-2004 à 11:56:10
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.
Marsh Posté le 04-03-2004 à 12:03:16
DocMaboul a écrit : |
avant de upper des vieux trucs, tu pourrais le lire en entier au moins
merci de ton intervention inutile
Marsh Posté le 04-03-2004 à 12:05:55
Taz a écrit : moi j'aime bien
|
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.
Marsh Posté le 28-01-2004 à 15:13:21
sous windows.
merci.
Message édité par terminator_t800 le 28-01-2004 à 15:15:53