C файловый ввод / вывод в Windows

#c #file-io

#c #file-io

Вопрос:

Прежде всего, это мой первый вопрос о переполнении стека, поэтому простите меня, если я неправильно отформатирую это.

Я новичок в C, и я дошел до точки в своей книге о файловом вводе / выводе. Следующий код, который должен печатать строки для test.txt , не создает новый текстовый файл или… делайте что угодно.

Я запускаю блоки кода 16.01 в Windows. Предназначен ли этот код для другой ОС?

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

main() {
    FILE *fp;
    fp = fopen("/tmp/test.txt", "w ");
    fprintf(fp, "This is testing for fprintf...n");
    fputs("This is testing for fputs...n", fp);
    fclose(fp);
}
  

Хорошо, поэтому удаление косой черты заставляет его работать. В исходном коде это ‘fopen(«/tmp/test.txt «, «W «);’
Разве это не должно создавать файл в папке tmp?

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

1. main() —> int main (void) … Кстати, в чем проблема?

2. Он не создает test.txt

3. Где вы ожидаете, что файл будет создан?

4. Windows не использует прямые косые черты между компонентами пути.

5. @user7005993: вы, вероятно, хотите что-то вроде: fp = fopen("test.txt", "w "); создать файл в вашем текущем рабочем каталоге.

Ответ №1:

Попробуйте удалить косую черту из имени файла. Кажется, вы все делаете правильно, проблема может быть в косой черте. Если нет, сообщите нам об этом.

Редактировать: когда я писал свой комментарий, ваш fopen использовал «/test.txt » и не » /temp/test.txt «, есть ли у вас папка «temp», созданная в каталоге, из которого запущено приложение? Если нет, попробуйте создать его. Или удалите его полностью и попробуйте создать текстовый файл в каталоге, из которого запущено приложение.

Ответ №2:

Используйте double // в Windows для навигации по каталогу.

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

int main() {
    FILE *fp;
    /* 
       file path in windows should be like this= C:\users\r.maurya\Desktop\Downloads\file.txt 
    */
    fp = fopen("C:\users\r.maurya\Desktop\Downloads\file.txt", "w ");
    fprintf(fp, "This is testing for fprintf...n");
    fputs("This is testing for fputs...n", fp);
    fclose(fp);
return 0;//Optional, On success of program 
}
  

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

1. Обратите внимание, что экранированная обратная косая черта не нужна — вы можете просто использовать стандарт / , который интерпретируется таким же образом в Windows и является несколько более переносимым.

2. Я предлагаю вам попробовать — это действительно работает с Windows path.

3. @PaulR да, конечно 🙂