2010-08-05 2 views
0

как создать системный вызов на C++, который копирует один файл в другие файлы?системный вызов для копирования файлов

+0

У C++ сам нет системных вызовов, вы имеете в виду, как добавить системный вызов к вашей ОС для этого? или как на самом деле сделать вызов для этого. –

+0

Это должно быть так, мне нравится писать код на C++, указав, что нужно скопировать файл из другого адресата, да, это было бы так, добавив системный вызов в мою ОС и как сделать вызов для этого. – RedKing

+0

хорошо, мой вопрос не был да или нет. Но в любом случае, чтобы даже начать обсуждение системных вызовов, вам нужно сообщить нам, какую ОС вы используете. Во-вторых, в зависимости от вашей ОС вам может потребоваться работать исключительно на C, чтобы ** создать ** новые системные вызовы (например, linux). –

ответ

1

Существует еще нет файловой системы библиотеки в стандартной библиотеке C++, так что у вас есть несколько вариантов:

  • использование конкретной платформы API: вы будете использовать не портативную функции, специфичные для вашей операционной системы, но что будет делать то, что вы хотите;
  • использовать (кросс-платформенную) библиотеку: хорошая библиотека boost :: filesystem, но я не уверен, что она позволяет перемещать/копировать файлы, просто проверьте функции в документе;
  • использовать std :: system() для вызова команд командной строки, специфичных для ОС: std :: system («copy fileA.txt fileB.txt» или подобное должно работать на окнах, это зависит от платформы и может быть опасным с точки зрения безопасности, но это работает.
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; 
} 

Blatently украденную из source

+0

Этот пример - прекрасная причина, почему вы должны писать в C++, а не C. Версия C++ - это всего лишь несколько строк. –

+0

@Martin: Тогда напишите, как вы это сделаете. – icktoofay

2

Вы можете использовать функцию std::system

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

быть Точную с помощью функции «системы», это как копирование файла из окна DOS, вы, в основном, минуя Windows.

+0

Вы предполагаете, что это в Windows. ОП не указывал. –

+0

Это может быть команда DOS, но все еще проходит через уровень ОС. –

+0

Joe White - Правда, это будет зависеть от того, как интерфейс командной строки работал на этой платформе, но тот же код, вероятно, не будет переносимым, поскольку команда, вероятно, будет отличаться. Martin York - Правда, но с помощью командной строки DOS иногда возникают проблемы, особенно с удалением, поскольку вы не получаете поддержку корзины. Во всяком случае, я бы рассмотрел использование «системы», чтобы быть взломом, поэтому я бы избегал этого вообще, просто мое мнение. – DevinEllingson

Смежные вопросы