2013-10-27 4 views
0

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

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

int main() 
    { 
    FILE *file; 
    char file_name[25]; 

    printf("What file do you want? "); 
    scanf("%s", file_name); 
    file = fopen("Dir1/Dir2/file_name","r"); 

    if(file == NULL) 
    { 
    printf("There is no file by that name\n"); 
    exit; 
} 

Я подозреваю, что проблема связана с частью «fopen». Если я набираю имя файла (например, файл = fopen («Dir1/Dir2/list.txt», «r»), тогда он будет работать. Однако я хочу, чтобы пользователь вводил имя файла. .! Благодаря

+0

вы делаете очень фундаментальную ошибку при работе с пользовательского ввода: Если вы не знаете, Вы можете сделать это с помощью 'fgets()' вместо 'scanf()', или вы можете использовать безопасный 'scanf(), если вы не знаете, что он делает (и вы никогда не знаете, что делает пользователь). 'format string, например'% 24s'. – glglgl

+0

Примечание: имена файлов могут содержать пробелы. 'scanf ("% s ", имя_файла)' не будет сканировать их в к 'file_name'. Рассмотрим 'scanf ("% 24 [\^n] ", имя_файла)' или 'fgets()'. – chux

ответ

1

Ваш код пытается открыть файл с именем «имя_файла» Я полагаю, вы имеете в виду это:.

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

int main() 
{ 
    FILE *file; 
    char file_name[25]; 
    char path[80]; 

    printf("What file do you want? "); 
    scanf("%s", file_name); 
    snprintf(path, sizeof(path), "Dir1/Dir2/%s", file_name); 
    // printf("Opening file %s\n", path); 
    file = fopen(path,"r"); 

    if(file == NULL) 
    { 
    printf("There is no file by that name\n"); 
    exit; 
    } 
+0

Ваш ответ будет стоить +1, если вы не использовали 'sprintf()' для работы с пользовательским вводом. Что делать, если пользователь вводит строку с более чем 80 символами? (Хорошо, прежде чем это повлияет на «путь», «имя_файла» будет переполняться, но об этом стоит упомянуть.) ' – glglgl

+0

Вы абсолютно правы, но так как искатель использует scanf, я догадывался, что перерасход не был основным беспокойство. Будет редактировать, хотя. – Pat

+3

Перерасход всегда беспокоит ИМХО - всегда лучше научить начинающих как можно скорее. – glglgl

Смежные вопросы