C: копирование нескольких файлов в один - PullRequest
1 голос
/ 17 декабря 2010

Я застрял / борюсь с проблемой, которую я пытаюсь в C (Linux), используя вызовы API (только), чтобы скопировать несколько входных файлов через командную строку в один выходной файл. Я искал ответы в Интернете, но, похоже, никто не решил. Моя программа позволяет мне указать несколько входных файлов и один выходной файл через командную строку. Например:

./archiver file1.txt file2 file3 file4 outputfile

Я читаю эти параметры, используя argc / argv. По какой-то причине, когда ls -l, ./archiver и outputfile имеют одинаковое количество байтов, это означает, что ни один из моих входных файлов не был скопирован в мой выходной файл, только то, что было в памяти (когда я cat outputfile это показывает кучу таких)

Ничего из содержимого моих входных файлов отсутствует в моих выходных файлах.

Пожалуйста, не могли бы вы помочь мне, потому что после этих "" Я не знаю, что делать, я пытался прочитать по malloc() и т. Д., Но я не знаю, как реализовать это, или если это даже уместно здесь .

Любая помощь приветствуется, спасибо за ваше время.

file_desc_in = open(argv[i],O_RDONLY,0);    
//NEED a loop to copy multiple files in...  
while (!eof) {
     bytes_read = read(file_desc_in, &buffer, sizeof(buffersize)); 

     if (bytes_read > 1)
         bytes_written = write(file_desc_out, &i, bytes_read);
     else {
         eof=1;
     }

Я не включил ошибки, но они есть. Спасибо за немедленный ответ.

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Вы говорите, что используете только вызовы API.О каком API вы говорите?API POSIX?Стандартный C / I / O API?

Если вы просто комбинируете входные файлы, вам не нужно писать C-программу для этого.Поскольку вы работаете в Linux, попробуйте использовать команду оболочки cat input1 input2 input3 > output.

Если вам нужно написать C-программу, начните с простого.Прежде чем вы на самом деле выполните какой-либо файловый ввод / вывод, убедитесь, что вы можете правильно интерпретировать входные аргументы.Пусть ваша программа просто прочитает данные из командной строки и распечатает что-то вроде этого:

Input files: file1.txt file2.txt file2.txt
Output files: outputfile.txt

Таким образом, вы можете проверить, что ваш код синтаксического анализа CLI работает правильно, прежде чем вы начнете беспокоиться о файловом вводе / выводе.Гораздо проще отлаживать вещи по одной штуке за раз.

1 голос
/ 17 декабря 2010

Ваш внешний цикл должен открыть каждое имя файла и закрыть его в конце цикла. Вы закрываете выходной файл в самом конце, после того как все входные файлы прочитаны.

Вы также должны узнать разницу между open, read, write и fopen, fread, fwrite.

1 голос
/ 17 декабря 2010

Это поможет увидеть ваш код.Здесь не так много, но я собираюсь сделать дикое предположение.Я подозреваю, что вы копируете файл, указанный argv[0] (ваша программа), а остальные не получаете.Я не думаю, что могу сделать что-то лучше с тем, что вы дали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...