begin process at 2012 05 28 23:20:13
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Fichier & Disque

 > 

Copie de fichier en append


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Copie de fichier en append

samedi 7 mars 2009 à 12:36:40 | Copie de fichier en append

0x80h4x0r

Salut();
Je voudrais coder une simple application de copie de fichier plain text (pas binaire) . Le probleme c'est que je veux copier les fichier en append ,  copier un fichier a la fin de l'autre sans overwriter le fichier de destination . Si quelqu'un a une solution je suis preneur . J'ai tente un petit "hack" en utilisant ifstream et ofstream , le programme compile mais crash . Je precise que j'ai hardcoder les chemin dans le programme .
samedi 7 mars 2009 à 13:06:52 | Re : Copie de fichier en append

0x80h4x0r

reSalut ();
J'ai trouve la solution a mon probleme . Le code marchais bien , en fait j'ai copier le contenu d'un tableau de char[300] dans un pointeur sur char (char*) et ca a deborder en memoire (buffer overflow)
voila un bout du code :

        ifstream File(SourceFile); // ouvre le fichier source en lecture
        if(!File) return false;
        char FileInput[256];
        while (File)
        {
            File.getline(FileInput,256);
            if(File)
            {
                ofstream Dest(DestFile); // ouvre le fichier source en ecriture
                if(!Dest) return false;
                Dest << FileInput << endl;
                Dest.close();
            }
        }
        File.close();
samedi 7 mars 2009 à 20:08:42 | Re : Copie de fichier en append

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

Vu que question est mise dans categ Windows, voici le code qui convient.
Note que tout fichier est "binaire", autrement dit une simple suite d'octets.
Il n'y a que les lib comme stream et autres bidules de ce genre pour induire de faux concepts.

HANDLE hsrc, hdst;
BYTE buf[1024];
DWORD rw;
hsrc = CreateFile(SourceFile, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
if(hsrc == INVALID_HANDLE_VALUE) return;
hdst = CreateFile(DestFile, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
if(hdst == INVALID_HANDLE_VALUE) goto closeSRC;
SetFilePointer(hdst, 0, 0, FILE_END);
fromSRC:
ReadFile(hsrc, buf, 1024, &rw, 0);
if(!rw) goto closeDST; // TOUT A ETE COPIE, STOP
WriteFile(hdst, buf, rw, &rw, 0);
goto fromSRC;
closeDST: CloseHandle(hdst);
closeSRC: CloseHandle(hsrc);


ciao...
BruNews, MVP VC++

dimanche 8 mars 2009 à 10:27:37 | Re : Copie de fichier en append

0x80h4x0r

Merci BruNews !!
Mais si les fichiers source et destination existent , Est ce que CreateFile() va overwriter ?

car je devellope une fonction pour mettre a jour un fichier dest a partir d'un fichier source ,
ca les ouvre et et ca les compare :
 si égaux return;
 si fichierDest < fichierSource (ce qui doit etre vrai) on compte les caracteres du fichier dest et on les enleve depuis le debut de la chaine source (vu que source contient ce qui est dans dest en plus d'autres donnees et nous on ne veut que ces autres donnees) et on ecrit sourceApresModification en append avec la fonction precedente .

Je n'est pas encore tester cet algo , mais je crois que ca marchera . Ya t'il plus simple ??
dimanche 8 mars 2009 à 10:34:29 | Re : Copie de fichier en append

BruNews

Administrateur CodeS-SourceS
plus simple ???
regarde la boucle:
fromSRC:
ReadFile(hsrc, buf, 1024, &rw, 0);
if(!rw) goto closeDST; // TOUT A ETE COPIE, STOP
WriteFile(hdst, buf, rw, &rw, 0);
goto fromSRC;
ici, plus simple tu meurs...

CreateFile comme toute autre fonction API fait simplement ce qu'on lui demande, suffit d'envoyer les bons paramètres.
Tu as les noms de fonction dans l'exemple, regarde MSDN pour détails.

ciao...
BruNews, MVP VC++
dimanche 8 mars 2009 à 12:36:53 | Re : Copie de fichier en append

0x80h4x0r

Je demandais plus simple pour l'algo de comparaison ...
dimanche 8 mars 2009 à 13:37:05 | Re : Copie de fichier en append

BruNews

Administrateur CodeS-SourceS
Pourquoi toutes ces manips ?
suffirait de vider source dès que copie finie et il n'y aurait plus rien à comparer ultérieurement.
Pas le droit de faire ça ?

ciao...
BruNews, MVP VC++
dimanche 8 mars 2009 à 14:44:44 | Re : Copie de fichier en append

0x80h4x0r

Merci encore BruNews , j'avais pas penser a ca


Cette discussion est classée dans : fichier, programme, copie, append, copier


Répondre à ce message

Sujets en rapport avec ce message

copier un fichier ressource lors de l'execution [ par arthuro2001 ] Je voudrais copier un fichier exe ( ou tout autre type de fichier ) en ressource de mon programme sur la machine executant mon programme afin de pouv Vitesse de copie [ par Roro8883 ] Bonjour à tous !Je voudrais savoir qu'elle serait la méthode la plus rapide pour effectuer une copie d'un fichier (relativement gros) :         1) Lir Comment copier un fichier .H et un fichier.CPP d'un programme à un autre [ par soamie2001 ] Salut à vous,J'ai ecris un programme x en C++ sous visual studio.net qui comprend des fichiers H et des fichiers CPP.Manitenant j'ecris un programme y Date de création d'un fichier copié [ par xasm ] Bonjour, Je desir savoir si on peut connaitre la date de création d'un fichier copier. Voila en fait si je copie un fichier qui date de janvier 2 de C vers C++ ? [ par boualiasma ] Salut, J'ai crée mon programme C sous Windows avec Visaul Studio 2008. Lorsque j'ajoute un fichier alors je trouve un fichier c++. Mais, je mis par e tester fichier vide ou non [ par boualiasma ] Bonjour, J'ai un fichier qui est généré dans le programme. Ce fichier peut être vide ou non. Je voulais tester si le fichier est vide ou non si le f Stream de fichier [ par warmup1992 ] Bonjour à tous, je sais pas trop si je suis dans la bonne section mais bhon si je me suis trompé veuillez me pardonner ^^ :) Enfaite je post pour avo [c]s'est possible un programme comme sa ? [ par CreateurDeBug ] Bonjour, s'est possible un programme qu'ont luit poserais des questions et il ouvrirais le contenue d'un fichier texte en rapport avec se qu'on à dema lire un fichier .dat comme input de programme c++ [ par I0o0I ] Hello, On me dit qu il est possible (en c++) qu un programme: nom01.cpp lise son input depuis un fichier nom02.dat... il suffit d inclure au début d


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales