Open file by its full path in C++

前端 未结 5 2289
暖寄归人
暖寄归人 2021-02-18 21:24

I want the user to give me the full path where the file exists and not just the file name. How do I open the file this way?

Is it something like this:

if         


        
相关标签:
5条回答
  • 2021-02-18 21:58

    You can use a full path with the fstream classes. The folowing code attempts to open the file demo.txt in the root of the C: drive. Note that as this is an input operation, the file must already exist.

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main() {
       ifstream ifs( "c:/demo.txt" );       // note no mode needed
       if ( ! ifs.is_open() ) {                 
          cout <<" Failed to open" << endl;
       }
       else {
          cout <<"Opened OK" << endl;
       }
    }
    

    What does this code produce on your system?

    0 讨论(0)
  • 2021-02-18 22:05

    The code seems working to me. I think the same with @Iothar.

    Check to see if you include the required headers, to compile. If it is compiled, check to see if there is such a file, and everything, names etc, matches, and also check to see that you have a right to read the file.

    To make a cross check, check if you can open it with fopen..

    FILE *f = fopen("C:/Demo.txt", "r");
    if (f)
      printf("fopen success\n");
    
    0 讨论(0)
  • 2021-02-18 22:16

    Normally one uses the backslash character as the path separator in Windows. So:

    ifstream file;
    file.open("C:\\Demo.txt", ios::in);
    

    Keep in mind that when written in C++ source code, you must use the double backslash because the backslash character itself means something special inside double quoted strings. So the above refers to the file C:\Demo.txt.

    0 讨论(0)
  • 2021-02-18 22:17

    For those who are getting the path dynamicly... e.g. drag&drop:

    Some main constructions get drag&dropped file with double quotes like:

    "C:\MyPath\MyFile.txt"
    

    Quick and nice solution is to use this function to remove chars from string:

    void removeCharsFromString( string &str, char* charsToRemove ) {
       for ( unsigned int i = 0; i < strlen(charsToRemove); ++i ) {
          str.erase( remove(str.begin(), str.end(), charsToRemove[i]), str.end() );
       }
    } 
    
    string myAbsolutepath; //fill with your absolute path
    removeCharsFromString( myAbsolutepath, "\"" );
    

    myAbsolutepath now contains just C:\MyPath\MyFile.txt

    The function needs these libraries: <iostream> <algorithm> <cstring>.
    The function was based on this answer.

    Working Fiddle: http://ideone.com/XOROjq

    0 讨论(0)
  • 2021-02-18 22:18

    A different take on this question, which might help someone:

    I came here because I was debugging in Visual Studio on Windows, and I got confused about all this / vs \\ discussion (it really should not matter in most cases).

    For me, the problem was: the "current directory" was not set to what I wanted in Visual Studio. It defaults to the directory of the executable (depending on how you set up your project).

    Change it via: Right-click the solution -> Properties -> Working Directory

    I only mention it because the question seems Windows-centric, which generally also means VisualStudio-centric, which tells me this hint might be relevant (:

    0 讨论(0)
提交回复
热议问题