存储相对于“我的文档”的路径的正确方法是什么

时间:2016-03-20 16:25:47

标签: windows winapi

我需要编写代码来处理以下场景:

  1. 提示用户输入文件路径。
  2. 用户可以输入“我的文档”文件夹下的路径。路径也可能是与“我的文档”文件夹无关的位置。
  3. 存储路径以供日后查找。
  4. 稍后,阅读存储的文件路径并加载她的文件。
  5. 许多个月后,用户决定重新定位她的“我的文档”文件夹。 Windows提供了一种方法。她自然希望我的申请能够继续正常运作。
  6. 步骤4中的代码仍然有效。应该有一种聪明的方法来记住路径是正常路径还是相对于我的文档并相应地获取文件。

    Windows API是否具有此功能内置?

    这样做的正确方法是什么?

    此外,用户在键入路径时可以输入任何特殊语法,以便Windows API可以自动引用相对于“我的文档”的位置吗?

3 个答案:

答案 0 :(得分:0)

在API中,ShGetKnownFolderPath使用FOLDERID_Documents Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

根据您编码的内容,可能会有预定义的功能。例如,在.NET中,您可以使用My DocumentsKNOWNFOLDERIDGetFolderPath的MSDN链接)

因此,如果您将 provided 'org.jboss.resteasy:resteasy-client:3.0.14.Final' 的相对路径存储为文件名,则始终可以使用这些函数创建绝对路径。

答案 1 :(得分:0)

使用SHGetFolderPath(CSIDL_MYDOCUMENTS)SHGetKnownFolderPath(FOLDERID_Documents)获取Documents文件夹的路径,然后检查用户的输入是否以该路径开头,如果是,则使用PathRelativePathTo()从中创建相对路径。稍后,您可以再次检索当前的Documents文件夹路径,并使用PathCombine()附加相对路径。

答案 2 :(得分:-1)

回答我自己的问题。事实证明,程序化的技巧是不必要的。

另见: MSDNsevenforums

我发现了问题的根本原因。 "我的文件"路口没有指向新的位置。我希望Windows7能够自动更改"我的文档"交界处到新的位置,但它没有。我能够通过在命令行运行以下cmd代码来解决问题。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<int> v{0,1,2,3,5,7};

    auto f = std::find(std::begin(v), std::end(v), 5);
    if (f != std::end(v)) {
        std::cout << "found element 5" << std::endl;
    }

    std::for_each(
        std::begin(v),
        std::end(v),
        [](int n) {
            if (n == 5) {
                std::cout << "found element 5" << std::endl;
            }
        }
    );
}

存储路径的正确方法是: &#34; C:\ Users {username} \ My Documents ...&#34;

如果这不起作用,可能是由Windows7创建的错误联结引起的。可以使用上面的cmd代码修复Junction。