Copier le contenu d'un fichier

boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 - 14 sept. 2009 à 22:35
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 28 sept. 2009 à 20:00
Bonsoir,

J'ai un fichier 1 qui contient des lignes et un fichier 2 qui est vide.

Je voulais copier le contenu de fichier 1 dans un fichier 2.
puis je vais travailler avec ce fichier 2 qui va être modifier.

Existe-t- elle une fonction permettant de copier le contenu d'un fichier dans un autre fichier ?

Merci.

35 réponses

boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
15 sept. 2009 à 08:54
Bonjour,

Existe-t- elle une fonction ou bien une procédure permettant de copier le contenu d'un fichier dans un autre fichier ?

Merci.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
15 sept. 2009 à 19:37
L'API Windows CopyFile permet de faire ce que tu demandes ...

---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
17 sept. 2009 à 21:47
Bonsoir,

pouvez vous me donner un exemple car je ne trouve pas un exemple dans le lien au dessus ?

Merci.
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
17 sept. 2009 à 22:06
Bonsoir,

voici le code:

#include <windows.h>
#include <stdio.h>

int main()
{
printf("%s\n", CopyFile("C:\\cop\\cop\\output.txt", "C:\\cop\\cop\\input.txt", FALSE) ? "Ok" : "Echec");
  return 0;
}


"input.txt" "output.txt" sont deux fichiers existants dans mon projet de travail.
"input.txt" contient des données et le fichier "output.txt" est vide
Je voulais copie le contenu de 'input.txt" vers "output.txt".

Mais après compilation et exécution j'ai le résultat:
ok

Mais, j'ai remarqué que le fichier vide "output.txt" reste vide
et le fichier "input.txt" contenant des données devient vide !!

Signifie quoi ceci ?

Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
18 sept. 2009 à 06:09
Bonjour,

Il y a deux solution:
CopyFile("input.txt", "output.txt", FALSE) ;



system("copy input.txt output.txt");


Laquelle est rapide ?

Merci.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 sept. 2009 à 01:30
Méthode avec CopyFile, évidemment.
Oublie définitivement la méthode exécutant la commande copy.

---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
19 sept. 2009 à 07:25
Méthode avec CopyFile, évidemment.


Merci beaucoup

J'ai une demande:

Je voulais supprimer totalement à partir de mon programme C sous windows tous les fichiers textes temporaires dans mon répertoire de travail et qui sont crées pendant l'exécution du programme .

Existe-t- elle une fonction ou une procédure permettant la suppression totale de ces fichiers texte ?

Je trouve la fonction 'remove' mais elle supprime un seul fichier:
remove("test.txt");


Comment je vais utiliser cette fonction dans les deux cas suivants ?

1) si je ne connais pas le nom de fichiers seulement l'extension par exemple *.txt

2)si je connais le nom et l'extension mais pas le nombre de fichier par exemple:
test1.txt
test2.txt
......
....
testn.txt

ici je ne connais pas en avance le nombre car ces fichiers sont générés par le programme seulement.


Merci.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
19 sept. 2009 à 10:50
Essaie DeleteFile avec comme paramètre "fichier*.txt" ...

---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
19 sept. 2009 à 11:40
Bonjour,
Essaie DeleteFile avec comme paramètre "fichier*.txt"

Je ne comprends pas les paramètres à passer à la fonction 'DeleteFile'

Comment je vais appliquer 'DeleteFile'
dans les deux cas décrits au dessus ?

Merci.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
20 sept. 2009 à 19:41
Essaie avec DeleteFile("disque:\rép\fichier*.txt",false);
Pas testé, et si ça ne fonctionne pas tu devras utiliser FindFirstFile & co.

---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
21 sept. 2009 à 15:45
Bonjour,
Voici le code :
#include <windows.h>
#include <stdio.h>
#include <stdlib.h> 
#include <string.h> 

int main()
{

DeleteFile("C:\\cop\\cop\\fichier*.txt",FALSE); 

}


Après la compilation, j'ai un warning :
1>c:\cop\cop\copie.c(10) : warning C4020: 'DeleteFileA' : paramètres réels trop nombreux



Avez vous une solution ?

Merci.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
21 sept. 2009 à 20:04
J'ai mis un paramètre en trop ... Essaie ça, mais si ça ne fonctionne pas tu devras énumérer les fichiers et les supprimer si nécessaire.
DeleteFile("C:\\cop\\cop\\fichier*.txt");

---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
21 sept. 2009 à 23:35
Bonjour,
Voici le code :
#include <windows.h>

#include <stdio.h>

#include <stdlib.h> 

#include <string.h> 



int main()

{

DeleteFile("C:\\cop\\cop\\fichier*.txt"); 

return 0;
}


Mais ce code ne supprime aucun fichier !!
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
22 sept. 2009 à 10:04
Bonjour,
Je mis le code C comme un nouveau programme C sous windows avec Visual studio 2008:


#include <Windows.h>

int main(int argc, char* argv[])

{

    char szPath[256];

    char szSearch[256];

    strcpy(szPath,"C:\\cop\\cop\");

    strcpy(szSearch,szPath);

    strcat(szSearch,"*.txt");

    WIN32_FIND_DATA wfd;

    HANDLE hfl = FindFirstFile(szSearch, &wfd);

    if(hfl == INVALID_HANDLE_VALUE) return 0;

    do {


        char szFile[256];

        strcpy(szFile,szPath);


        strcat(szFile,wfd.cFileName);

        DeleteFile(szFile);


    } while(FindNextFile(hfl, &wfd));

    FindClose(hfl); 

    return 0;

}


Après la compilation, j'obtiens 14 erreurs et 9 avertissements :


1>------ Début de la génération : Projet : cop, Configuration : Debug Win32 ------
1>Compilation en cours...
1>copie.c
1>c:\cop\cop\copie.c(59) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74) : voir la déclaration de 'strcpy'
1>c:\cop\cop\copie.c(61) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74) : voir la déclaration de 'strcpy'
1>c:\cop\cop\copie.c(63) : warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(79) : voir la déclaration de 'strcat'
1>c:\cop\cop\copie.c(65) : error C2275: 'WIN32_FIND_DATA' : utilisation non conforme de ce type comme expression
1> c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(6154) : voir la déclaration de 'WIN32_FIND_DATA'
1>c:\cop\cop\copie.c(65) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'wfd'
1>c:\cop\cop\copie.c(65) : error C2065: 'wfd' : identificateur non déclaré
1>c:\cop\cop\copie.c(67) : error C2275: 'HANDLE' : utilisation non conforme de ce type comme expression
1> c:\program files\microsoft sdks\windows\v6.0a\include\winnt.h(402) : voir la déclaration de 'HANDLE'
1>c:\cop\cop\copie.c(67) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'hfl'
1>c:\cop\cop\copie.c(67) : error C2065: 'hfl' : identificateur non déclaré
1>c:\cop\cop\copie.c(67) : error C2065: 'wfd' : identificateur non déclaré
1>c:\cop\cop\copie.c(67) : warning C4133: 'fonction' : types incompatibles - de 'int *' à 'LPWIN32_FIND_DATAA'
1>c:\cop\cop\copie.c(67) : warning C4047: '=' : 'int' diffère de 'HANDLE' dans les niveaux d'indirection
1>c:\cop\cop\copie.c(69) : error C2065: 'hfl' : identificateur non déclaré
1>c:\cop\cop\copie.c(69) : warning C4047: '==' : 'int' diffère de 'HANDLE' dans les niveaux d'indirection
1>c:\cop\cop\copie.c(77) : error C2065: 'wfd' : identificateur non déclaré
1>c:\cop\cop\copie.c(77) : error C2224: la partie gauche de '.cFileName' doit avoir un type struct/union
1>c:\cop\cop\copie.c(77) : error C2198: 'strcat' : pas assez d'arguments pour un appel
1>c:\cop\cop\copie.c(81) : error C2065: 'hfl' : identificateur non déclaré
1>c:\cop\cop\copie.c(81) : warning C4022: 'FindNextFileA' : incompatibilité de pointeur pour le paramètre réel 1
1>c:\cop\cop\copie.c(81) : error C2065: 'wfd' : identificateur non déclaré
1>c:\cop\cop\copie.c(81) : warning C4133: 'fonction' : types incompatibles - de 'int *' à 'LPWIN32_FIND_DATAA'
1>c:\cop\cop\copie.c(83) : error C2065: 'hfl' : identificateur non déclaré
1>c:\cop\cop\copie.c(83) : warning C4022: 'FindClose' : incompatibilité de pointeur pour le paramètre réel 1
1>Le journal de génération a été enregistré à l'emplacement "file://c:\cop\cop\Debug\BuildLog.htm"
1>cop - 14 erreur(s), 9 avertissement(s)
Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
22 sept. 2009 à 20:16
Déclare tes variables en tête de fonction et définis _CRT_SECURE_NO_WARNINGS pour ne plus avoir de warnings à cause des fonctions non sécurisées.
Après avoir fait ça, ton code devrait ressembler à ça :
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
    char szPath[MAX_PATH]; char szSearch[MAX_PATH];
    char szFile[MAX_PATH]; WIN32_FIND_DATA wfd; HANDLE hfl;

    strcpy(szPath,"C:\\cop\\cop\");
    strcpy(szSearch,szPath);
    strcat(szSearch,"*.txt");

    hfl = FindFirstFile(szSearch, &wfd);
    if(hfl == INVALID_HANDLE_VALUE) return 0;

    do {
        strcpy(szFile,szPath);
        strcat(szFile,wfd.cFileName);
        printf("Deleting %s\n",szFile);
        DeleteFile(szFile);
    } while(FindNextFile(hfl, &wfd));

    FindClose(hfl); 
    return 0;
}
---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
22 sept. 2009 à 22:22
Merci beaucoup çà marche.

Comment adapter cette solution pour supprimer seulement des fichiers textes qui vérifient la condition suivante:
si je connais le nom et l'extension mais pas le nombre de fichier par exemple:
test1.txt
test2.txt
......
....
testn.txt

ici je ne connais pas en avance le nombre car ces fichiers sont générés par le programme .
Comment supprimer ces fichiers qui portent dans leur préfixe le nom 'test' suivi d'un numéro ?

Merci
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
22 sept. 2009 à 22:40
Essaie de transformer strcat(szSearch,"*.txt");
En strcat(szSearch,"test*.txt");
---
VB.NET is good ... VB6 is better
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
22 sept. 2009 à 23:13
Merci beaucoup.
0
boualiasma Messages postés 393 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 23 décembre 2011 5
23 sept. 2009 à 06:37
Bonjour,

Je voulais supprimer seulment les fichiers textes qui commencent par le préfixe 'test*.txt'
et ceux par le préfixe 'exp*.txt'
tout en laissant les autres fichiers textes.

J'ai ajouté à la solution ces deux instructions mais la suppression ne s'exécute pas.
 strcat(szSearch,"test*.txt");
 strcat(szSearch,"exp*.txt");




Que proposez vous ?

Merci.
0
cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
23 sept. 2009 à 18:44
Ce que tu proposes comme solution n'est évidemment pas valable, la variable szSearch contient le filtre pour énumérer les fichiers de ton répertoire. Tu dois faire une function avec comme paramètre szPath et le filtre (par exemple szFilter). Déclare-la comme ceci : int DeleteFiles(char* szPath, char* szFilter); et colles-y le code de main(). Dans son code, supprimes la définition de la variable szPath. Tu n'auras plus qu'à appeler ta nouvelle fonction avec les bons paramètres, comme ceci :
char* szPath = "c:\\cop\\cop\";
DeleteFiles(szPath,"test*.txt");
DeleteFiles(szPath,"exp*.txt");
return 0;
---
VB.NET is good ... VB6 is better
0
Rejoignez-nous