在C++中以完整路径打开文件

17 c++ file path ifstream

我希望用户给我文件存在的完整路径,而不仅仅是文件名.如何以这种方式打开文件?

它是这样的:

ifstream file;
file.open("C:/Demo.txt", ios::in);
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.

Gre*_*ill 18

通常,在Windows中使用反斜杠字符作为路径分隔符.所以:

ifstream file;
file.open("C:\\Demo.txt", ios::in);
Run Code Online (Sandbox Code Playgroud)

请记住,使用C++源代码编写时,必须使用双反斜杠,因为反斜杠字符本身意味着双引号字符串中的特殊内容.所以上面指的是文件C:\Demo.txt.

  • Win32支持路径的"\"或"/",除非您绕过路径规范化(以"\\?\"开头的路径).见http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx (11认同)
  • 尼尔,这与编译器无关.Windows shell以与反斜杠相同的方式处理正斜杠.自新界早期以来就是如此. (2认同)
  • 它甚至与shell无关,它取决于内核(理查德说得对).我说"通常"因为你在使用正斜杠时仍然会遇到问题,因为有些程序会将以正斜杠开头的参数解释为命令行选项而不是文件名.你是正确的,只是打开文件,正向或反斜杠应该没问题.公约更喜欢反斜杠. (2认同)

小智 11

您可以使用fstream类的完整路径.下面的代码尝试在C:驱动器的根目录中打开文件demo.txt.请注意,由于这是输入操作,因此该文件必须已存在.

#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;
   }
}
Run Code Online (Sandbox Code Playgroud)

这段代码在您的系统上产生了什么?