Почему моя программа считывает имя файла только в том случае, если в C указано двойное расширение файла?

#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.