2016-02-25 3 views
1

Я пишу программу на C, которая преобразует текстовый файл в двоичный файл и наоборот. Первый вопрос, который у меня есть, - открыть файл в режиме «w». Есть ли необходимость в проверке правильности открытия выходного файла?Открытие файла в C в режиме записи

FILE *output; 
output = fopen("output.bin", "w"); 
if(output == NULL) 
    { printf("Error opening output file\n");} 

В основном, мой вопрос заключается в том, будет ли вывод когда-либо фактически == NULL. Потому что, если возникла проблема с открытием вывода, не будет ли он просто создать новый файл с именем «output.bin»?

Также мой другой вопрос заключается в том, как символы фактически сохраняются в двоичном файле. Я знаю, что я должен сохранять каждый символ как символ без знака, поэтому он может иметь значения от 0 до 255, а затем я должен записать этот символ в выходной файл. Фактический логический путь того, как это происходит, не имеет смысла, если кто-нибудь может мне помочь или указать мне в правильном направлении, я был бы признателен!

+0

Что значит «конвертирует текстовый файл в двоичный файл и наоборот»? – e0k

+0

«Есть ли необходимость в проверке правильности открытия выходного файла». Да, абсолютно необходимо проверить возвращаемое значение. Как минимум это хорошая практика. И, конечно, открытие может потерпеть неудачу по многим причинам. Например, нет разрешений на создание файлов в текущем каталоге. Или файл уже существует, но не доступен для записи. – kaylum

+0

Я должен иметь двоичный файл, сохраняющий L байтов (строки) и 4 байта (целое число), где L = длина строки. 1 байт - значение L. Я хочу, чтобы я мог объяснить больше, но я все еще пытаюсь понять, как хранятся двоичные файлы и представлены – John

ответ

3

Да, открытие файла в режиме записи может все еще сбой. Вот несколько возможных причин, но, конечно, не единственные:

  • У вас нет разрешения для создания или изменения файла.
  • Файл доступен только для чтения или каталог, в котором он находился, доступен только для чтения.
  • Файл будет внутри другого файла. (test/foo если test является файлом, а не каталог)
  • Файловая система находится вне пространства или дескрипторы (на файловых системах, имеющих фиксированное количество дескрипторы)
  • Пользователь поразившего их квоту места на диске.
  • Файл будет находиться на другом компьютере, а сеть не работает.
  • Неверное имя файла - например, C:/???*\\\\foo на окнах.
  • Слишком длинное имя файла.
Смежные вопросы