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

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

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

Я запускаю Code Blocks 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?


person James A    schedule 13.10.2016    source источник
comment
main() --› int main (void)...Кстати, в чем проблема?   -  person LPs    schedule 13.10.2016
comment
Он не создает test.txt   -  person James A    schedule 13.10.2016
comment
Где вы ожидаете, что файл будет создан?   -  person LPs    schedule 13.10.2016
comment
@LPs main() также должны возвращать значение в ОС.   -  person roottraveller    schedule 13.10.2016
comment
@rootTraveller Не совсем так. Взгляните на эту запись.   -  person LPs    schedule 13.10.2016
comment
он все еще не создает файл .txt   -  person James A    schedule 13.10.2016
comment
Windows не использует косую черту между компонентами пути.   -  person user3386109    schedule 13.10.2016
comment
@user3386109 user3386109, каким будет новый код?   -  person James A    schedule 13.10.2016
comment
@ user3386109: на самом деле вы можете использовать косую черту в путях даже в Windows.   -  person Paul R    schedule 13.10.2016
comment
@ user7005993: вы, вероятно, хотите что-то вроде: fp = fopen("test.txt", "w+");, чтобы создать файл в вашем текущем рабочем каталоге.   -  person Paul R    schedule 13.10.2016
comment
@rootTraveller Я использовал правильный путь к файлу с помощью /, и это сработало. Спасибо   -  person James A    schedule 13.10.2016
comment
@user7005993 user7005993 это красота, если Linux :)   -  person roottraveller    schedule 13.10.2016
comment
@rootTraveller да, но было бы неплохо иметь окна для других вещей   -  person James A    schedule 13.10.2016


Ответы (2)


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

#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 
}
person roottraveller    schedule 13.10.2016
comment
Обратите внимание, что экранированная обратная косая черта необязательна — вы можете просто использовать стандартную /, которая интерпретируется таким же образом в Windows и несколько более переносима. - person Paul R; 13.10.2016
comment
Я предлагаю вам попробовать - это действительно работает с путем Windows. - person Paul R; 13.10.2016
comment
@PaulR, да, конечно :) - person roottraveller; 13.10.2016

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

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

person BartBB    schedule 13.10.2016