#c #file #file-handling
Вопрос:
#include<stdio.h> //standard input output library
#include<stdlib.h>
void main()
{
FILE *fp ; //fp is the file pointer
char ch ; //a variable to print contents of the file
fp = fopen ( "text.txt", "r" ) ;//Normal file name with extension
while ( 1 )
{
ch = fgetc(fp) ;
if (ch == EOF) //if program reaches, EOF, it stops
break ;
printf ( "%c", ch);
}
fclose ( fp );
}
Программа выше не читает мой файл, но когда я заменяю имя файла, как показано ниже, это работает.
fp = fopen ( «text.txt.txt», «r» ) ;//Имя расширения двойного файла
Почему это text.txt не работает, но text.txt.txt работать ?
Комментарии:
1. Может быть, потому что файл «text.txt.txt» существует и «text.txt» неужели нет в рабочем каталоге?
2.Не связано: Если вы собираетесь создавать программы, которые работают, проверьте, что то, что вы приказываете программе, действительно работает.
fp = fopen ( "text.txt", "r" );
может привести кfp == NULL
тому, что вы знаете. Все это. Тест, тест, тест.3.
main
возвращаетсяint
, нетvoid
.fgetc
возвращаетint
, нетchar
, чтобы значениеEOF
можно было отличить от любого допустимого символьного значения.
Ответ №1:
Это, безусловно, означает, что ваш файл действительно имеет имя text.txt.txt
.
Я предполагаю , что ваш файловый браузер настроен на скрытие расширения файла: если бы файл был назван text.txt
, то ваш файловый браузер, предположительно, показывал бы только text
, и поскольку он назван text.txt.txt
, отображается ваш файловый браузер text.txt
. (Если я не ошибаюсь, эта конфигурация используется по умолчанию в проводнике Windows во всех последних версиях Windows, поэтому я предполагаю, что вы используете именно это; но меня бы не удивило, если бы существовали другие браузеры файлов, которые можно настроить таким образом.)
Комментарии:
1. И я абсолютно поражен тем, что это опасное поведение по-прежнему используется по умолчанию в Windows.