我需要编写代码来处理以下场景:
步骤4中的代码仍然有效。应该有一种聪明的方法来记住路径是正常路径还是相对于我的文档并相应地获取文件。
Windows API是否具有此功能内置?
这样做的正确方法是什么?
此外,用户在键入路径时可以输入任何特殊语法,以便Windows API可以自动引用相对于“我的文档”的位置吗?
答案 0 :(得分:0)
在API中,ShGetKnownFolderPath使用FOLDERID_Documents
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
。
根据您编码的内容,可能会有预定义的功能。例如,在.NET中,您可以使用My Documents
(KNOWNFOLDERID和GetFolderPath的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)
回答我自己的问题。事实证明,程序化的技巧是不必要的。
另见: MSDN, sevenforums
我发现了问题的根本原因。 "我的文件"路口没有指向新的位置。我希望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。