我是C的初学者,目前必须学习C和Win32 API,在我的第一个项目中,我需要向用户获取路径名和文件名,然后检查文件是否存在,如果用户需要,请删除该文件。
我目前只能查找文件是否存在。 我不熟悉(What's the best way to check if a file exists in C?)之前在此站点中显示的解决方案,但已提示/指示我使用一个名为getfullpathname()的函数来解析字符串,然后检查输入的文件是否存在。 我的问题是,据我搜索的所有GetFullPathName所做的(试图了解MSDN和几个或更多站点)都是将工作驱动器和目录隐藏在您提供的文件名上。 我想念什么吗?我是否需要将工作目录更改为输入的路径,以便隐含路径和名称文件,或者只是将其解析的路径传递给函数,以便可以进行检查? 我是否仅需要此功能来解析路径或隐藏路径字符串和名称字符串? 您能为我提供完成项目第一部分的示例吗?
谢谢。
答案 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);
}
调试结果:
实际上,没有测试。 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;
}