C ++ Создание файлов разных расширений - PullRequest
0 голосов
/ 03 сентября 2018

В настоящее время у меня есть программа, предназначенная для чтения файлов в двоичном виде, сохранения содержимого в переменную и записи его в новый файл с тем же расширением. Я протестировал программу с различными типами файлов, и только некоторые из них работают. Файлы типа .exe, медиа-файлы (.mp4, .jpg) не работают, в то время как .txt, pdf, doc работают.

Чтобы убедиться, что это ошибка в программах чтения / записи, я открыл файлы, которые не работают с Notepad ++, и скопировал весь контент в новый файл с таким же расширением. Тем не менее эти файлы не работают.

Так чего мне не хватает? Извините за плохой английский. Спасибо!

Edit:

int archive(string files[], string output, int file_len) {
FILE *read_ptr, *write_ptr;
size_t result;
long file_size;
char *buffer;
char entry_text [8] = "###=###";

for(int c = 0; c < file_len; c++) {
    read_ptr = fopen(files[c].c_str(), "rb");
    if(read_ptr == NULL) {
        cout << files[c] << " : File not found\n";
    }
    else {
        cout << files[c] << " : File found\n";

        write_ptr = fopen(output.c_str(), "ab");

        fseek(read_ptr, 0, SEEK_END);
        file_size = ftell(read_ptr);
        rewind(read_ptr);

        buffer = (char*) malloc (sizeof(char)*file_size);
        result = fread(buffer, 1, file_size, read_ptr);

        fprintf(write_ptr, "%s %s %d ", entry_text, files[c].c_str(), file_size);
        fwrite(buffer, 1, file_size, write_ptr);

        fclose(write_ptr);
    }
}

return 0;

}

Edit2: исправлено

Спасибо за помощь, ребята. Задний пробел fprintf вызывал ошибку. В начале всех записей был написан пробел.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Такие файлы, как исполняемые файлы (.exe), медиа-файлы (.mp4, .jpg) имеют свой собственный заголовок, который содержит необходимые данные для работы. Когда вы читаете / записываете его так, что вы в основном портите эти файлы, вытесняя необходимые данные из их Исходные адреса, Notepad ++, вероятно, также не копирует необработанные двоичные данные. https://en.wikipedia.org/wiki/File_format

0 голосов
/ 03 сентября 2018

Без кода трудно помочь, но общий совет - проверить, открываете ли вы файл в правильном режиме (двоичном или текстовом). Например, функция fopen имеет третий аргумент mode, который сообщает о режиме "http://www.cplusplus.com/reference/cstdio/fopen/

...