2013-12-04 3 views
1

компилировать код затем запустить его, но он возвращает «Ошибка записи зашифрованных данных в файл. Таким образом, я предполагаю, что этот вопрос находится где-то в FWRITE.Шифрование код не записывает обратно в файл

Но я не могу точно определить его .

мне нужна помощь здесь, если вы могли бы объяснить проблему, что было бы очень полезно, спасибо много

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

    int encrypt_data(FILE *); 

    int main(void) 
    { 
     FILE *fp; 
     int return_code; 

     printf("Please enter the file to be encrypted: "); 
     char filename[200]; 
     scanf("%s", filename); 
     fp=fopen(filename,"r"); 

     return_code = encrypt_data(fp); 

     return 0; 
    } 
    int encrypt_data(FILE *disk_fp) 
    { 
     int i; 
     unsigned long int file_size; 
     int key_length; 
     char *file_buff = NULL; 

     char key[] = "12`3-vk0fn"; 

     key_length = strlen(key); 

     fseek(disk_fp, 0, SEEK_END); 
     file_size = ftell(disk_fp); 

     rewind(disk_fp); 

     file_buff = malloc(file_size); 

     if(fread(file_buff, file_size, 1, disk_fp) != 1) 
     { 
     printf("Error in reading file\n"); 
     return -1; 
     } 

     for(i=0; i<file_size; i++) 
     { 
     file_buff[i] = file_buff[i]^key[i%key_length]; 
     } 

     rewind(disk_fp); 

     if(fwrite(file_buff, file_size, 1, disk_fp) != 1) 
     { 
     printf("Error in writing encrypted data to file\n"); 
     return -1; 
     } 
     free(file_buff); 
     fclose(disk_fp); 

    return 0; 
    } 
+0

Почему вы ожидаете, что возвращаемое значение 'fwrite' будет 1? –

+0

Очень почти дубликат [Нужно зашифровать файл, у меня все написано, но ошибка в файле чтения) (http://stackoverflow.com/questions/20365298/need-to-encrypt-a-file-i-have- это все-списанный, но ошибки в-чтения-файл). – duskwuff

+1

Если вы когда-нибудь задавались вопросом, почему системный вызов завершается неудачно, попробуйте сообщить системе. Вместо 'printf (« мое неоднозначное сообщение об ошибке »)', попробуйте 'perror (« fwrite »)' –

ответ

2

вы открываете файл в режиме «г», что означает неизменяемые. После этого вы пытаетесь написать что-нибудь Кстати, вы не проверяете, что вы открываете файл без ошибок и не закрывайте его, если fwrite/fread не удалось.

+0

Большое спасибо Уильяму Пурселю и Адриану Крупе ... Адриан, это было так, как вы сказали только в чтении, и Уильям подумал это noob программист perror() благодаря обоим. – Superman

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