2010-08-05 186 views
0

如何在C++上創建一個將一個文件複製到其他文件的系統調用?系統調用來複制文件

+0

C++本身沒有系統調用,你的意思是如何添加一個系統調用到你的操作系統來做到這一點?或者如何實際進行呼叫。 – 2010-08-05 01:01:05

+0

應該是這樣的,我喜歡在C++上編寫代碼,指示從另一個目的地複製文件,是的,這兩者都是,將系統調用添加到我的操作系統以及如何進行調用。 – RedKing 2010-08-05 01:05:10

+0

以及我的問題不是一個是或否的問題。但無論如何,爲了開始討論系統調用,您需要告訴我們您正在使用的操作系統。其次,取決於你的操作系統,你可能需要專門用C來創建新的系統調用(例如linux)。 – 2010-08-05 01:22:29

回答

1

有一個在C++標準庫中沒有但文件系統庫,讓你有幾種選擇:

  • 使用特定於平臺的API:你會使用特定的非便攜功能,以您的操作系統,但那將會做你想做的事;
  • 使用(跨平臺)庫:一個好的庫是boost :: filesystem,但我不確定它允許移動/複製文件,只需檢查文檔中的函數;
  • 使用std :: system()調用特定於操作系統的命令行命令:std :: system(「copy fileA.txt fileB.txt」或類似的應該在Windows上工作,它是平臺特定的,安全的角度來看,但它的作品。
0

此代碼拷貝一個文件C.你可以修改它複製到許多文件。

 

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

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


    if(argc!=3) { 
    printf("Usage: copy \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; 
} 

source

+0

這個例子是你爲什麼要用C++而不是C寫的完美理由。C++版本只有幾行。 – 2010-08-05 04:31:09

+0

@Martin:然後發佈如何做。 – icktoofay 2011-01-30 04:00:02

2

Blatently被盜您可以使用std::system函數

#include <cstdlib> 
... 
std::system("cp from.txt to.txt"); 
0

小心使用「系統」功能,這就像是從DOS窗口複製文件,你基本上繞過了Windows。

+0

你認爲這是在Windows上。 OP沒有說明。 – 2010-08-05 03:38:40

+0

它可能是DOS命令,但仍然通過OS層。 – 2010-08-05 04:32:05

+0

喬懷特 - 確實,這取決於命令行界面如何在該平臺上工作,但相同的代碼可能無法移植,因爲命令可能會有所不同。 Martin York - 確實如此,但使用DOS命令行有時會導致問題,特別是在刪除後,因爲您沒有獲得回收站支持。 無論如何我會考慮使用「系統」作爲黑客,所以我會避免它一般,只是我的意見。 – DevinEllingson 2010-08-05 06:07:21

相關問題