Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 绝对文件路径作为std::ifstream构造函数参数无效_C++_Windows_File_Winapi_Path - Fatal编程技术网

C++ 绝对文件路径作为std::ifstream构造函数参数无效

C++ 绝对文件路径作为std::ifstream构造函数参数无效,c++,windows,file,winapi,path,C++,Windows,File,Winapi,Path,我正在开发一个Win32应用程序,它有一个配置对话框,用户可以在其中指定数据库根目录/工作目录之类的文件路径。到目前为止,在测试中,我一直在对相对文件路径使用此功能,因为我的文件结构没有太大的扩展。此外,我的config.txt文件与.exe文件位于同一目录中,在启动时加载,使用相对的硬编码路径调用std::ifstream构造函数 由于我最近使用的命令行允许拖动程序的.exe文件上的文件,因此传递它们的路径,config.txt文件的路径不知何故无法识别为有效路径,因此我的程序会相应地对此抛出

我正在开发一个Win32应用程序,它有一个配置对话框,用户可以在其中指定数据库根目录/工作目录之类的文件路径。到目前为止,在测试中,我一直在对相对文件路径使用此功能,因为我的文件结构没有太大的扩展。此外,我的config.txt文件与.exe文件位于同一目录中,在启动时加载,使用相对的硬编码路径调用std::ifstream构造函数

由于我最近使用的命令行允许拖动程序的.exe文件上的文件,因此传递它们的路径,config.txt文件的路径不知何故无法识别为有效路径,因此我的程序会相应地对此抛出错误。用绝对路径替换相对的、硬编码的路径并不能解决这个问题,因为这样一来,在我的用户名中也会出现空格、反斜杠(可能是德语Umlaute)等问题

除了config.txt路径的问题外,我现在还尝试将Windows资源管理器地址栏中的绝对路径粘贴到程序配置对话框的编辑控件中。然而,对于这些路径,我遇到了几乎相同的问题

为了总结这一点,并可能进一步提示问题的根源,当我拖动.exe上的文件以传递其路径时,也会发生同样的行为。幸运的是,包含空格的路径在命令行中被引用,因此分离很容易,但是读入后,它们的行为就像config.txt路径和进入配置对话框的路径一样

长话短说-我正在寻找一种方法,将Windows资源管理器的命令行或地址栏中的路径转换为std::ifstream构造函数的有效参数。这里处理的问题实际上很常见——标准的空格、反斜杠和umlauteunicode

下面是从对话框中读取绝对路径并尝试打开std::ifstream的一个简单示例:

char path[256];
HWND hEditCtrl = GetDlgItem(hwndConfigurationDlg, IDC_CONFIG_EDITTEXT_DATABASE);
GetWindowText(hEditCtrl, path, sizeof(path));

// path contains something like
// "C:\Users\Firstname Lastname\Documents\2__Programming\Desktop\Gerät.txt"
// notice the whitespace, backslashes, German Umlaut.

std::ifstream ifstr(path, ios::in);
if (!ifstr.good()){
    MessageBox(NULL, "The file was not found at the specified path.",
                    "File Open Error", MB_OK);
}

最可能的问题是,您的程序无法处理在不同工作目录中启动的问题。请输入一个最小的代码示例。您希望代码示例包含什么内容?它几乎只是从一个编辑控件中接收文本,该控件中有一个来自Windows资源管理器的绝对路径,并试图用该路径打开一个std::ifstream。@HerrJoebob我的程序不处理在不同工作目录中启动的问题的原因是什么?我的意思是,只要文件路径是绝对的和有效的,exe在哪里又有什么关系?路径是否也包含如上所示的引号?不,不是在用户输入路径时。但是可以添加。我不知道std::ifstream构造函数是否使用带引号的路径。