2017-05-08 38 views
-2

假设我的程序需要访问文件夹'文件'中的某个文件,该文件当前存储在文件夹中。在Visual Studio中,我可以将当​​前工作目录指定为'bin',因此如果我使用Visual Studio运行我的代码,则可以按名称访问文件夹文件,而无需任何其他文件路径信息。例如。C++:查找某个文件夹,无论我是从IDE运行程序还是作为独立可执行文件

std::ifstream file; 
file.open("Files\\someFile.txt"); 

但是,如果我作为一个独立的可执行文件运行我的程序,那么当然它将无法找到文件。这是一个问题,因为我打算将其作为独立可执行文件进行测试。

处理这种情况的常用方法是什么?

回答

1

您可以保存在注册表的路径。在您的开发系统上,您可以手动将密钥添加到包含路径的注册表中,并且在您释放软件时,可以使用安装程序将该密钥设置为任何您需要的值。查看this link from the Microsoft web page以了解如何使用注册表。

如果您知道您的文件总是位于您的可执行文件所在的文件夹中,那么您还可以使用the windows API functionGetModuleFileName来检索可执行文件的路径。有时候,这是像一个预编译集团连接有用:

#ifdef STANDALONE 
... GetModuleFileName ... 
#else 
... [open hard coded path] ... 
#endif 

STANDALONE是当你要测试的IDE之外的软件,它可以定义一个宏。

0

在程序中使用相对路径时,基本上要求操作系统相对于当前工作目录搜索它。不是从可执行文件的目录。因此,如果您的可执行文件位于以下位置C:\a\out.exe,并且您在C:\b中用..\a\out.exe调用它,那么您的工作目录仍然是C:\b
这是从Visual Studio运行时(默认情况下)发生的情况。 您可以在项目设置 - 配置属性/调试中更改它。改变工作目录从$(ProjectDir)$(TargetDir)


UPD。

约这里MSVC项目宏更多信息:https://msdn.microsoft.com/en-us/library/c02as0cs.aspx

+0

那么TargetDir到底是什么? –

+0

@Jimmy_Rustle'$(TargetDir)'被设置为您的目标的目录。目标是你的情况下的可执行文件。您可以在配置属性/常规中查看有关当前目标设置的更多信息 – teivaz

相关问题