2015-04-23 3 views
-4

У меня есть два входа: video1.y и video2.y. Я хочу объединить эти два файла, чтобы создать один файл video.y? Я пишу код в C. Это может быть основной вопрос, но не в состоянии сделать это !! Оба входа имеют такую ​​же высоту и ширину. Код:Соединить два входа .y

int main() 
{ 
    // Open two files to be merged 
    FILE *fp1 = fopen("D:\\dump\\video1.y", "rb"); 
    FILE *fp2 = fopen("D:\\dump\\video2.y", "rb"); 

    // Open file to store the result 
    FILE *fp3 = fopen("D:\\dump\\video.y", "wb"); 
    char c; //Change char to int as per answer given by user3710044.. 
      //...Which is working !! 
    if (fp1 == NULL || fp2 == NULL || fp3 == NULL) 
    { 
     puts("Could not open files"); 
     exit(0); 
    } 

    // Copy contents of first file to video3.y 
    while ((c = fgetc(fp1)) != EOF) 
     fputc(c, fp3); 

    // Copy contents of second file to video3.y 
    while ((c = fgetc(fp2)) != EOF) 
     fputc(c, fp3); 

    printf("Merged video1.y and video2.y into video.y"); 

    fclose(fp1); 
    fclose(fp2); 
    fclose(fp3); 
    return 0; 
} 

video1.y и video2.y имеют 55 МБ .И мой выход 3 KB.I я не в состоянии объединить эти два входа

+0

У меня есть вопрос. – user3476225

+1

Если вы просто хотите объединить два входа, используйте команду dos для добавления двоичных файлов, используйте команду COPY с помощью переключателя/b. Синтаксис выглядит следующим образом: 'скопировать /б + /б [....] ' -или- 'копировать/б + [....] ' – Ashwin

+0

Спасибо Ashwin за ваш ответ Моя цель состоит в том, чтобы просто объединить два входа. Я написал программу c тем же, что имеет некоторую логическую ошибку, так что я не могу объединить эти входы в выходное видео. Ответ на ваш вопрос мне очень помог. Спасибо – user3476225

ответ

2

Тип переменной c является char это значение не может содержать значение EOF и все 256 байтовых значений.

Как это происходит на вашей машине char является подписанный тип так Возвращаемый результат броска от fgetc и значение отлитого из EOF на самом деле означает, что EOF находится в конце файла. Проблема в том, что если файл содержит байты 0xFF, это также рассматривается как EOF.

Подводя итог, измените тип c на int.

+0

Чрезвость user3710044. После твоего предложения его работа. – user3476225

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