使用在C中称为getfullpathname()的函子解析路径?

时间:2019-04-01 17:03:47

标签: c windows visual-studio winapi

我是C的初学者,目前必须学习C和Win32 API,在我的第一个项目中,我需要向用户获取路径名和文件名,然后检查文件是否存在,如果用户需要,请删除该文件。

我目前只能查找文件是否存在。 我不熟悉(What's the best way to check if a file exists in C?)之前在此站点中显示的解决方案,但已提示/指示我使用一个名为getfullpathname()的函数来解析字符串,然后检查输入的文件是否存在。 我的问题是,据我搜索的所有GetFullPathName所做的(试图了解MSDN和几个或更多站点)都是将工作驱动器和目录隐藏在您提供的文件名上。 我想念什么吗?我是否需要将工作目录更改为输入的路径,以便隐含路径和名称文件,或者只是将其解析的路径传递给函数,以便可以进行检查? 我是否仅需要此功能来解析路径或隐藏路径字符串和名称字符串? 您能为我提供完成项目第一部分的示例吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

将工作驱动器和目录并入您提供的文件名。

这不是简单的串联,此函数不检查文件是否存在,而只是将文件的相对路径(无论文件是否存在)解析为绝对路径。函数GetFullPathName的第一个参数是您需要放入的文件的相对路径。如果文件位于当前工作目录下,则只需将filename发送给函数调用。如果文件位于上方路径,则可以发送../filename,该函数会将其解析为绝对文件路径。

您可以使用GetShortPathName。如果文件不存在,则调用将失败,并返回0。

答案 1 :(得分:0)

嗯,根据我的惯例

假设文件位于当前工作目录中,那么GetFullPathName听起来是个好主意。它接受文件名,并通过预设当前工作目录将其转换为完整路径。

  

注意:无论文件是否存在,API都会返回路径   是否在工作目录中;它只使用您的文件名   提前提供并准备当前工作目录。

DEMO1:

#include <windows.h>

int main()
{
   char filename[] = "test.txt";
   char fullFilename[MAX_PATH];
   GetFullPathName(filename, MAX_PATH, fullFilename, nullptr);
   MessageBox(NULL, fullFilename, "DEBUG", MB_OK);
}

调试结果:

Messagebox

实际上,没有测试。 txt文本文件。

  

所以您可以通过以下方式完成

DEMO2:

#include <windows.h>

int main()
{
   char lpszPath[] = "..\\Project20";
   long     length = 0;
   TCHAR*   buffer = NULL;

   buffer = new TCHAR[length];
   length = GetShortPathName(lpszPath, buffer, length);

   if (length == 0)
   {
     MessageBox(NULL, "ERROR", "DEBUG", MB_OK);
   }
   else
   {
     MessageBox(NULL, "SUCCESS", "DEBUG", MB_OK);
   }
   delete[] buffer;

   return 0;
}

通过ERROR和SUCCESS判断文档是否存在  file loaction

SUCCESS