目前我正在编写一种从文件名'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,我希望一切都很清楚,并且它太长了; - )入魔
答案 0 :(得分:0)
我建议在www.boost.org上使用Boost FileSystem库。请特别查看path
类,其中包含make_absolute
和parent_path
等方法。
答案 1 :(得分:0)
我发现_stat()和_access()并不适用于目录的权限。请参阅this stackoverflow page。
使用_stat(),您无法使用"。\"获取有关当前目录的信息。但_access()至少可以检查目录是否存在"。\"或" .. \"。
总之,我使用_access()来检查目录是否存在,使用_stat()来检查现有文件的权限。如果要创建一个文件,我将通过执行来检查它。
顺便说一下;-)我不需要将工作目录与用户指定的文件结合起来,因为我可以在_access()中单独使用指定的文件来确定目录是否存在。
入魔
答案 2 :(得分:0)
这是Windows示例代码GetFileNameFromHandle,向您展示如何从HANDLE获取路径。我认为这正是你要找的。 p>
http://msdn.microsoft.com/en-us/library/aa366789%28v=vs.85%29.aspx