Не удается создать или записать текстовый файл на C

#c #file #fopen

#c #файл #fopen

Вопрос:

Я пытаюсь создать и записать файл на C — однако по какой-то причине этот код выполняется успешно, файл не создается. Пожалуйста, найдите мой код ниже, любая помощь будет оценена

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

int main(void)
{
    int num;
    FILE* fptr;

    fptr = fopen("E:\SAMPLE FILESsample.txt", "w ");

    if (fptr == NULL)
    {
        printf("Error!");
        exit(1);
    }

    printf("Enter num: ");
    (void)scanf("%d", amp;num);

    fprintf(fptr, "%d", num);
    fclose(fptr);

    return 0;
}
 

Комментарии:

1. OT: (void)scanf("%d", amp;num); не игнорируйте возвращаемые значения. Обработка кодов возврата важна для обработки ошибок и отладки.

2. Вторая обратная косая черта неправильно экранирована в вашем имени файла.

3. путь в fopen может быть проблемой, если вы поделитесь тем, что есть SAMPLE FILES , или попытаетесь сначала использовать жестко закодированный путь, а затем создать по мере необходимости.

4. Файл находится в корневом каталоге диска E:. Еще раз доказывая, что вы никогда не должны игнорировать предупреждения компилятора.

5. Привет, добро пожаловать в stack overflow. Как упоминалось выше, путь к файлу на диске E, вероятно, является проблемой. Вы неправильно экранировали каталог для файла? Существует ли фактический каталог? Вам нужно зафиксировать ошибку, и это подскажет вам, что именно не так.

Ответ №1:

Это очень простая проблема.

 fptr = fopen("E:\SAMPLE FILESsample.txt", "w ");
 

В этом проблема. Как вы, должно быть, знаете, используется для определения escape-последовательности. Из-за этого для фактического значения вам нужно поместить его 2 раза, как вы это делали в E:\ . Файл, вместо создания в SAMPLE FILES , создается в корневом каталоге.
Измените его на :

 fptr = fopen("E:\SAMPLE FILES\sample.txt", "w ");
 

И ваш код должен работать. Я протестировал его и получил результат.
Убедитесь, что у вас есть папка с именем SAMPLE FILES на E: Иначе fopen() возвращает NULL.

Ответ №2:

Чтобы открыть файл для чтения или записи, лучше всего, по крайней мере, иметь какую-то проверку ошибок и отчеты об этом. Пожалуйста, посмотрите базовый пример ниже:

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

extern int errno ;

int main () {

   FILE * pf;
   int errnum;
   pf = fopen ("e:\sample files\sample.txt", "wb");
    
   if (pf == NULL) {
   
      errnum = errno;
      fprintf(stderr, "Value of errno: %dn", errno);
      perror("Error printed by perror");
      fprintf(stderr, "Error opening file: %sn", strerror( errnum ));
   } else {

      printf("Enter num: ");
      (void)scanf("%d", amp;num);

      fprintf(fptr, "%d", num);
      fclose(fptr);
   
      fclose (pf);
   }
   
   return 0;
}
 

По крайней мере, таким образом, если вы получите сообщение об ошибке, у вас есть хорошие шансы исправить или устранить ее программно.

Ответ №3:

fptr = fopen(«E:SAMPLE FILESsample.txt «, «w «);

->

fptr = fopen(«E:SAMPLE FILESsample.txt «, «w «);

попробуйте

Комментарии:

1. Нет, символ ` ` используется в качестве escape-последовательности. Вам нужно 2 из них, чтобы зарегистрировать фактический ` ` в строке. В вашей строке обратная косая черта обрабатывается как s и S .