如何将工作目录与用户指定的文件(w或w / o路径)组合以获取文件的up-dir

时间:2011-05-18 14:35:17

标签: c++ windows directory filepath

目前我正在编写一种从文件名'sFilename'外部获取的lib。有了它,数据被写入一个文件,它将被创建,数据被附加到带有数据的现有文件,数据在现有文件中用数据更新,或者数据是从现有数据中读取的。

使用我的lib的应用程序的用户应该尽可能多地获取有关文件处理错误的信息。

为此我编写了一个方法FileExists(...),它使用_stat()来确定文件是否存在以及方法“bool checkPermission(std :: string sFilename,CFile :: EOpenmode iOpenmode)”如果具有iOpenmode(读,写,读写)的指定文件(sFilename)具有读取,写入或读写的权限,则返回bool。

此方法也适用于_stat(sFilename.c_str(),& buf),并以buf格式返回所需的文件信息。

在检查任何文件之前,我想检查包含指定文件的目录是否具有所需的权限,并且我想使用checkPermission方法[与_stat()一起使用该目录!

现在的问题是:如何轻松确定包含目录?如果用户只提供文件名“test.txt”,则将在工作目录中创建或读取文件。因此很容易获得上行目录。它与工作目录一样。 (并且使用checkPermission很简单,可以获得有关目录的详细信息)。

但是当用户不仅给出文件名时呢?例如“.... \ test.txt”或“dir1 \ dir2 \ test.txt”。如何将工作目录与特定路径组合以获取文件的上行目录,然后检查权限?

Phew,我希望一切都很清楚,并且它太长了; - )

入魔

3 个答案:

答案 0 :(得分:0)

我建议在www.boost.org上使用Boost FileSystem库。请特别查看path类,其中包含make_absoluteparent_path等方法。

答案 1 :(得分:0)

我发现_stat()和_access()并不适用于目录的权限。请参阅this stackoverflow page

使用_stat(),您无法使用"。\"获取有关当前目录的信息。但_access()至少可以检查目录是否存在"。\"或" .. \"。

总之,我使用_access()来检查目录是否存在,使用_stat()来检查现有文件的权限。如果要创建一个文件,我将通过执行来检查它。

顺便说一下;-)我不需要将工作目录与用户指定的文件结合起来,因为我可以在_access()中单独使用指定的文件来确定目录是否存在。

入魔

答案 2 :(得分:0)

这是Windows示例代码GetFileNameFromHandle,向您展示如何从HANDLE获取路径。我认为这正是你要找的。

http://msdn.microsoft.com/en-us/library/aa366789%28v=vs.85%29.aspx