c++文件拖动读取路径
时间: 2023-12-13 13:03:55 浏览: 52
以下是使用 C 语言在 Windows 平台下实现文件拖动读取路径的示例代码:
```c
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
if (argc == 1)
{
// 如果没有命令行参数,则等待用户拖动文件到程序图标上
HINSTANCE hInstance = GetModuleHandle(NULL);
if (hInstance != NULL)
{
LPWSTR lpCmdLine = GetCommandLineW();
int nArgs;
LPWSTR* szArglist = CommandLineToArgvW(lpCmdLine, &nArgs);
if (szArglist != NULL && nArgs > 1)
{
// 从命令行参数中获取文件路径
WCHAR* szFile = szArglist[1];
char szPath[MAX_PATH];
WideCharToMultiByte(CP_UTF8, 0, szFile, -1, szPath, MAX_PATH, NULL, NULL);
printf("File path: %s\n", szPath);
LocalFree(szArglist);
return 0;
}
else
{
printf("Please drag and drop a file onto the program icon.\n");
getchar();
return 1;
}
}
}
else if (argc > 1)
{
// 从命令行参数中获取文件路径
printf("File path: %s\n", argv[1]);
return 0;
}
return 1;
}
```
在上述代码中,如果程序没有命令行参数,则等待用户拖动文件到程序图标上。在 Windows 平台下,当用户拖动一个或多个文件到程序图标时,系统会自动将文件路径作为命令行参数传递给程序。
为了获取文件路径,我们需要先获取命令行参数,并从中提取第一个参数即为文件路径。在 Windows 下,命令行参数是以 Unicode 编码的字符串形式传递的,我们需要将其转换为 UTF-8 编码的字符串才能在控制台中输出。
如果程序有命令行参数,则直接从命令行参数中获取文件路径。
需要注意的是,Windows 平台下的文件路径是以 Unicode 编码形式表示的,而 C 语言默认使用的是 ASCII 编码,因此需要进行编码转换。在上述代码中,我们使用了 Windows API 中的 WideCharToMultiByte 函数将 Unicode 编码的字符串转换为 UTF-8 编码的字符串。