如何在Visual Studio中使用C ++ shlwapi库?

时间:2016-07-03 07:18:12

标签: c++ windows visual-studio

我想创建一个简单的程序,用于按扩展名对文件进行分类,但是当试图编译时出错了

  

严重级代码说明项目文件行错误LNK2019未解析   函数" void中引用的外部符号__imp__PathFileExistsW @ 4   __cdecl classifyFiles(void)" (?classifyFiles @@ YAXXZ)

我的代码是调用PathFileExists的地方:

void classifyFiles() {
    for (int i = 0; i < files.max_size(); i++) {
        //if each folder doesn't exist, create folder
        LPCWSTR folderName = (L"\\" + extensions.at(i)).c_str();
        if (!PathFileExistsW(folderName)) {
            CreateDirectory(folderName, NULL);
        };
        LPCWSTR destination = (extensions.at(i) + files.at(i)).c_str();
        //move file
        MoveFile(files.at(i).c_str(), destination);
    }
}

我用谷歌搜索了一下,似乎还不足以包含Shlwapi.h标题,还需要链接库。但我无法找到有关如何在Visual Studio中执行此操作的任何答案。

注意:我也遇到问题是每个菜单和所有内容(这是我第一次使用Visual Studio),所以请明确说明在哪里找到可能包含屏幕截图的内容。

参考文献:https://msdn.microsoft.com/en-us/library/windows/desktop/bb773584(v=vs.85).aspx

3 个答案:

答案 0 :(得分:3)

将shlwapi.lib添加到依赖项列表中:

配置属性 - &gt;链接器 - &gt;输入 - &gt;附加依赖

答案 1 :(得分:1)

我为构建成功做了两件事: 添加
#pragma comment(lib, "Shlwapi.lib")
包括之后。 在我的具体情况下,更改以下代码行会因某些原因产生差异,即使它们是相同的。改变:

if (!PathFileExistsW(folderName))

要:

if (PathFileExistsW(folderName) == FALSE)

出于某种原因使用PathFileExists的值,就像第一个输出链接错误一样,即使其他一切都是有序的。第二天,我再次测试它,并且两种方式都有效。也许这是我的想象力并且犯了一些错误。

答案 2 :(得分:0)

首先你需要add VC++ directories 然后你需要设置链接器输入。