2015-02-09 3 views
1

// Я пытаюсь прочитать файл внутри функции, вызвав функцию main и передав имя файла в качестве аргумента. Это дает ошибку при открытии файла. Но то же самое отлично работает, когда я передаю файл имени файла напрямую («имя_файла»). Почему это так? Заранее спасибо.Передача абсолютного имени файла для чтения файла в C++

#include<string> 
#include<fstream> 
void parse(string file_name) 
{ 
    ifstream file("file_name"); //opens file 
    if (!file) 
    { 
     cout<<"Cannot open file\n"; 
     return; 
    } 
    cout<<"File is opened\n"; 
    file.close(); //closes file 
} 

int main() 
{ 
    parse("abc.txt"); //calls the parse function 
    return; 
} 
+2

'ifstream файл («имя_файла»);' означает открыть файл с именем '«имя_файла»', а не содержимое переменной 'file_name'. Если вы получаете сообщение об ошибке «std :: string» и не используете C++ 11, вам может понадобиться использовать 'file_name.c_str()'. Просто угадайте, хотя, поскольку вы не опубликовали фактическую ошибку в своем вопросе. –

+0

Спасибо Ninja. Что может быть альтернативой? что, если я хочу прочитать все файлы, присутствующие в папке? –

ответ

2

Удалите кавычки вокруг file_name и убедитесь, что файл, используемый для ввода присутствует в текущей рабочей директории (папке, в которой ваш исполняемом). Кроме того, если вы не используете c++11, вам нужно преобразовать строку в char* так:

#include <string> 
#include <fstream> 
#include <iostream> 
using namespace std; 
void parse(string file_name) 
{ 
    ifstream file(file_name.c_str()); //opens file 
    if (!file) 
    { 
     cout<<"Cannot open file\n"; 
     return; 
    } 
    cout<<"File is opened\n"; 
    file.close(); //closes file 
} 

int main(){ 
    string st = "abc.txt"; 
    parse(st); //calls the parse function 
    return 0; 
} 
+0

Спасибо Shikhar. Теперь мой код работает. –

+0

@PrashantGupta Пожалуйста, выберите правильный ответ и завершите этот Q & A. :) – bluefog

1

Удалить все цитаты "file_name". При цитировании вы командуете ifstream, чтобы прочитать файл в рабочем каталоге под названиемfile_name. Кроме того, убедитесь, что abc.txt находится в рабочем каталоге, который обычно является каталогом, в котором находится ваш исполняемый файл.

#include<string> 
#include<fstream> 
void parse(string file_name) 
{ 
    ifstream file(file_name.c_str()); //opens file (.c_str() not needed when using C++11) 
    if (!file) 
    { 
     cout<<"Cannot open file\n"; 
     return; 
    } 
    cout<<"File is opened\n"; 
    file.close(); //closes file 
} 

int main() 
{ 
    parse("abc.txt"); //calls the parse function 
    return; 
} 
+0

Я пробовал удалять кавычки Я получаю эту ошибку: никакой подходящей функции для вызова «std :: basic_ifstream > :: basic_ifstream (std :: string &) ' –

+1

@PrashantGupta Посмотреть мой ответ – bluefog

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