Могу ли я убедиться, что при fopen () - файле для "w" программа не создает файл? - PullRequest
1 голос
/ 17 ноября 2010

Я пишу программу, которая собирает пользовательский ввод для двух имен файлов и открывает одно из них для чтения и одно для записи.
Мой код:

void 
gather_input (char* infileName, char* outfileName, char* mode,
          FILE* inputFile, FILE* outputFile)
{   int flag = 0; //error checking flag
do
{   flag = 0;
    printf("Enter the name of the source file: "); 
    scanf("%s", infileName);
    if (!(inputFile = open_input_file(infileName))) //will enter if statement only if
    {   fprintf(stderr, "Error opening '%s': %s\n", //inputFile == NULL
        infileName, strerror(errno)); //some error checking
        flag = 1; //true
    }
} while (flag);

do
{   flag = 0;
    printf ("Enter the name of the destination file: ");
    scanf("%s", outfileName);
    if (!(outputFile = open_output_file(outfileName)))
    {   fprintf (stderr, "Error opening '%s': %s\n",
        infileName, strerror(errno));
        flag = 1;
    }
} while (flag);

отлично работает при проверке ошибок, что входной файл был открыт; однако он не может исправить или обнаружить, что выходной файл был правильно введен или открыт. Это часть более крупной функции, которую я могу публиковать при необходимости (режим char * используется в другом разделе).

Проблема в том, что когда я говорю fopen (outfileName, "w"), что и происходит в open_output_file (), программа будет пытаться создать файл, если он не существует (то есть когда пользователь выдает мусор вход). Я хочу избежать этого. Есть идеи?

Ответы [ 2 ]

4 голосов
/ 17 ноября 2010

человек 3 fopen

``r+''  Open for reading and writing.  The stream is positioned at the
        beginning of the file.

``w''   Truncate file to zero length or create text file for writing.
        The stream is positioned at the beginning of the file.

Так что "r+" кажется хорошим кандидатом.

3 голосов
/ 17 ноября 2010

Использовать открытый режим "r+" (чтение и запись).7.19.5.3/4 стандарта C99:

Открытие файла с режимом чтения («r» в качестве первого символа в аргументе режима) завершается неудачно, если файл не существует или его невозможно прочитать.

Это означает, что вам нужно разрешение на чтение для файла.

Если вы не используете POSIX, вы можете использовать open, чтобы открыть файл, затем fdopenчтобы получить FILE* для результирующего дескриптора файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...