2017-01-31 9 views
-2

Итак, я пытаюсь объединить любое количество заданных файлов в указанном порядке и распечатать выходные данные на выходе std. Имена файлов и спецификации даются через командную строку UNIX. У меня есть проверка корректности ввода, я просто затрудняюсь выяснить, как поместить мои мысли в синтаксис Си (я никогда не кодировал в C раньше).C (UNIX), Объединение файлов (количество байтов)

& г объединит весь файл & Qn (N представляет собой целое число) будет сочетать в себе только первые N байт & Ун (N представляет собой целое число) будет сочетать в себе только последние N байт

Путь Я мышление было бы лучше всего открыть файл с fopen, выяснить, насколько он большой, и сделать буфер, который большой, а затем прочитать в этот буфер (с fread) и написать буфер (с fwrite). Я чувствую, что решение довольно простое и не должно быть нескольких строк.

Моя попытка первой спецификации & g находится ниже. Я могу только дождаться, потому что для меня это очень новый язык.

FILE *fp; 
fp = fopen(file, "r"); 

// if file fails to open - file is not found 
if (fp == NULL) 
{ 
    perror("file %s does not exist", file); 
} 
else 
{ 
    fseek(fp, 0L, SEEK_END); 
    file_sz = ftell(fp); 
    fseek(fp, 0L, SEEK_SET); 
    buffer = malloc(sizeof(file_sz)); 
} 
+0

Почему бы не просто использовать getline и читать и печатать каждую строку по одному? – ccpgh

+0

Пожалуйста, задайте конкретный вопрос. Мы ничего не сделаем для вас. Итак, что конкретно вам нужно? Вы выделили буфер, теперь читаете файл. Это может быть не лучшее решение для начала, но, по крайней мере, реализовать столько, сколько вы можете. Затем задайте конкретный вопрос, как только вы застрянете в конкретной проблеме. – kaylum

+0

И 'malloc (sizeof (file_sz));' должен быть 'malloc (file_sz);' – kaylum

ответ

0

Ниже приведен пример, который можно использовать, чтобы получить что-то хорошее и работает.

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

char buffer[1001]; // NYI - no magic numbers. Static size.... 

int main(int argc, char** argv) { 
    bzero(buffer, sizeof(buffer)); 
    for(int x=1; x<argc; x++) { 
    FILE *fp = fopen(argv[x], "r+"); 
    if (fp) { 
     while(fgets(buffer, 1000, fp)) { // NYI - no magic numbers 
     printf("%s", buffer); 
     } 
    } else { 
     printf("could NOT open file %s\n", argv[x]); 
    } 
    } 
} 
+0

Использование 'fgets/fprintf' не нужно, так как сырой копии достаточно, поскольку OP хочет скопировать весь файл как есть. 'fread/fwrite' более уместен. –

+0

Большое спасибо! Мне пришлось изменить несколько вещей, чтобы это работало с моим кодом, но я рад, что он работает. Как я могу заставить его печатать последние несколько N байтов файла? – Vno

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

  • Нет связанных вопросов^_^