C++ ServerApplication无法查看具有相对路径的文件
我有一个扩展ServerApplication的应用程序。与依赖服务器应用程序使用的预定义位置中的配置文件不同,我希望强制用户通过命令行标志传递文件路径:C++ ServerApplication无法查看具有相对路径的文件,c++,c++11,poco-libraries,C++,C++11,Poco Libraries,我有一个扩展ServerApplication的应用程序。与依赖服务器应用程序使用的预定义位置中的配置文件不同,我希望强制用户通过命令行标志传递文件路径: myapp-f path/to/my/file--daemon 我的问题是,使用--daemon标志时,我无法传递相对路径,因为ServerApplication无法看到文件,我需要传递完整路径:/path/to/My/file。如果未传递--daemon标志,则应用程序能够看到该文件 我知道,一旦应用程序后台监控,它会将其目录更改为/,但我
myapp-f path/to/my/file--daemon
我的问题是,使用--daemon标志时,我无法传递相对路径,因为ServerApplication无法看到文件,我需要传递完整路径:/path/to/My/file
。如果未传递--daemon
标志,则应用程序能够看到该文件
我知道,一旦应用程序后台监控,它会将其目录更改为/
,但我正在ApplicationServer::initialize
中读取文件,并打印应用程序的值。dir
显示正确的路径
这是一个bug还是我遗漏了什么?application.dir与当前工作目录不同。事实上,Util::ServerApplication是根用户,这与默认的守护程序行为一致。但是文档中说这是在初始化之间完成的,我认为这意味着调用
void ServerApplication::initialize(Application&self)
和int ServerApplication::main(const vector&args)
。那么目录是什么时候更改的?它在哪里更改—“初始化完成后,但在进入main()方法之前”。我认为您将application.dir与当前工作目录混合在一起。它们不是一回事,application.dir是可执行文件所在的目录。如果只指定文件名,而不指定目录路径,则当前工作目录就是写入文件的位置。对不起,我不明白。初始化和main()不是我上面强调的两个方法吗?因为我在initialize(Application&self)
中读取了文件,但此时应用程序已经移动到另一个目录。然后它没有移动到另一个目录,而是保留在“/”中。看看你的平台文档是怎么说的。我会接受这个答案,因为应用程序确实正在移动到另一个目录,但是文档不够清晰。将回顾正在发生的事情。