开发者

Pass path to file / filename as argument to a function that prints the file to screen in C++

As the title says, is there any way to pass the path to the file / filename to open as an argumen开发者_Python百科t in the function?

I've written a short code for printing a .txt-file to the screen in C++, but instead of having all the code in the main(), I'd rather have it as an own function that I can call with the filename of the file to open as the only input argument.

Basically the beginning of the function would look like

void printFileToScreen()
{
 ifstream fin;
 char c; 
 fin.open("FILE_TO_OPEN.txt", ios::in);

blablabla
}

Now is there any way to pass "FILE_TO_OPEN.txt" when I call the function?

I've tried

void printFileToScreen(string str)
{
 ifstream fin;
 char c; 
 fin.open(str, ios::in);
blablabla
}

where I call the function like printFileToScreen("FILENAME.txt"), but with no luck, so I'm not sure how to do this.

Hope anyone can help :)


Unfortunately, the iostream functions deal with const char* types rather than with std::string (the iostream functions were developed independently of the STL). You instead could use std::string::c_str() to obtain a const char*:

 fin.open(str.c_str(), ios::in);


As a general design rule, I would not pass the file name to the called function. I would pass the already opened std::istream object to read from. This allows you to do the job of printing in a function, and to do the job of opening the file and dealing with non-existent files in another. This has the bonus of being able to pass std::cin to your function!


Try changing your function to look like this :

void printFileToScreen(const string &str);   
//If you pass a const char*, a string will be constructed  

or this :

void printFileToScreen(const char *);

The function you wrote expects an instance of std::string to be passed by value.


Never mind, after some more trying and failing I found out that I needed to pass a char pointer, and not a string. :)


Of course you can pass the filename as a function parameter. If in doubt, pass a "const char*" rather than a string. I should work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜