2010-05-07 5 views
3

je le code ci-dessous pour copier des fichierscomment copier des fichiers sans afficher la fenêtre dos

sprintf(command, "copy /Y %s %s", sourceFile, targetFile); 
system(command); 

Il fonctionne à l'exception de la fenêtre dos montrant ce qui est très gênant.

J'essaie d'utiliser CreateProcess() (avec un #ifdef pour WINNT), mais je ne sais pas comment configurer la ligne de commande pour le même. Toutes les autres options pour copier des fichiers en C (sur Windows) sans afficher la fenêtre DOS?

Répondre

7

de Windows fournit la famille CopyFile des API pour cela.

+0

C'est ce que je cherchais. Merci. – vinaym

2

Voici un code que j'ai levé de this website. Vous pouvez envelopper dans votre propre fonction et juste passer les chemins source et le fichier de destination (dans cet exemple, argv[1] et argv[2)

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    FILE *from, *to; 
    char ch; 


    if(argc!=3) { 
    printf("Usage: copy <source> <destination>\n"); 
    exit(1); 
    } 

    /* open source file */ 
    if((from = fopen(argv[1], "rb"))==NULL) { 
    printf("Cannot open source file.\n"); 
    exit(1); 
    } 

    /* open destination file */ 
    if((to = fopen(argv[2], "wb"))==NULL) { 
    printf("Cannot open destination file.\n"); 
    exit(1); 
    } 

    /* copy the file */ 
    while(!feof(from)) { 
    ch = fgetc(from); 
    if(ferror(from)) { 
     printf("Error reading source file.\n"); 
     exit(1); 
    } 
    if(!feof(from)) fputc(ch, to); 
    if(ferror(to)) { 
     printf("Error writing destination file.\n"); 
     exit(1); 
    } 
    } 

    if(fclose(from)==EOF) { 
    printf("Error closing source file.\n"); 
    exit(1); 
    } 

    if(fclose(to)==EOF) { 
    printf("Error closing destination file.\n"); 
    exit(1); 
    } 

    return 0; 
} 
+0

Quoi? Pas de 'sendfile'? Hmph. – aviraldg

+1

Le code est faux - il ne peut pas copier un fichier vide. –

+0

@Jacob Ce code fonctionne, mais comme je sais, fgetc() & fputc() est trop lent fonctions. – mosg

0

Il existe des bibliothèques qui peuvent le faire, ou vous pouvez écrire le code vous-même, en utilisant un tampon et fread/fwrite. Cela fait longtemps que j'ai écrit un code C pour la dernière fois, donc je ne peux pas me souvenir de la syntaxe exacte.

0
#include<windows.h> 
    #include<tchar.h> 
    #include<shellapi.h> 


    #define _UNICODE 

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, 
      PSTR szCmdLine, int iCmdShow) 
    { 

     SHFILEOPSTRUCT s={0}; 

     s.hwnd = GetFocus(); 
     s.wFunc = FO_COPY; 
     s.pFrom = _T("d:\\songs\\vineel\\telugu\0\0"); 
     s.pTo = _T("d:\0"); 
     s.fFlags = 0; 
     s.lpszProgressTitle = _T("Vineel From Shell - Feeling the power of WIN32 API"); 

     SHFileOperation(&s); 
    } 

Le code ci-dessus invoquera explorateur de gestionnaire de copie .....

Questions connexes