传递绝对文件名以在c ++中读取文件

时间:2015-02-09 06:10:04

标签: c++ file absolute

//我试图通过调用main中的函数并将文件名作为参数传递来读取函数内的文件。它在打开文件时出错。但是当我直接传递文件名文件(“file_name”)时,同样正常。为什么会这样?提前谢谢。

#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 个答案:

答案 0 :(得分: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;   
}

答案 1 :(得分: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;   
}