Как прочитать все содержимое файла, включая символы NUL между допустимым текстом? - PullRequest
2 голосов
/ 24 марта 2011

У меня есть файл, который мне нужно прочитать в буфер (char *), но проблема в том, что в файле есть несколько «забавных символов» между правильным текстом.

enter image description here

Поэтому, когда я пишу код, подобный следующему:

  FILE *fp;
  if((fp = fopen(".\\test.txt", "rt"))==NULL){
    printf("Cannot open file2\n");
  }

  fseek(fp, 0, SEEK_END);
  long int fsize = ftell(fp);
  rewind(fp);
  //char *buffer2 = malloc(fsize * sizeof(char));
  buffer = malloc(fsize * sizeof(char));
  fread(buffer, 1, fsize, fp);
  buffer[fsize] = '\0';
  fclose(fp); 

  printf("fsize = %i\n", fsize);
  printf("Buffer = %s\n", buffer);

Распечатывает только первую часть текстового файла следующим образом:

Buffer = header

И, очевидно, останавливается на первом NUL-символе.

Есть ли способ прочитать весь буфер файла, включая забавные символы?

Или это не возможно в C?

FSIZE читается правильно, просто FREAD не читает весь буфер; - (

Любая помощь будет принята с благодарностью; -)

Спасибо

Линтон

ОБНОВЛЕНИЕ: ОК, я был немного глупым ..... если я записываю буфер в файл, в нем есть все, только если я записываю его на экран, он останавливается на нуле хорошо.

1 Ответ

1 голос
/ 24 марта 2011

Не открывайте файл в «текстовом» режиме («rt»), используйте двоичный режим («rb»).

Кроме того, вполне возможно, что данные считываются, но printf("Buffer = %s\n", buffer) будет печатать только до первого NUL, поэтому ваша отладка не будет выполнять то, что вы хотите. Возможно, вы захотите написать небольшую функцию шестнадцатеричного дампа.

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