Windows 存储相对于我的文档的路径的正确方法是什么
我需要编写代码来处理以下场景:Windows 存储相对于我的文档的路径的正确方法是什么,windows,winapi,Windows,Winapi,我需要编写代码来处理以下场景: 提示用户输入文件的路径 用户可以输入其“我的文档”文件夹下的路径。路径也可能指向与她的“我的文档”文件夹无关的位置 存储路径以供以后查找 稍后,读取她文件的存储路径并加载她的文件 几个月后,用户决定重新定位她的“我的文档”文件夹。Windows提供了一种实现这一点的方法。她自然希望我的应用程序继续正常运行 步骤4中的代码应该仍然有效。应该有一种聪明的方法来记住路径是普通路径还是相对于文档的路径,并相应地获取文件 Windows API是否内置了此功能 正确的方法是
FOLDERID\u Documents
根据您的编码内容,可能会有预定义的函数。例如,在.NET中,您可以使用Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
(和的MSDN链接)
因此,如果将我的文档的相对路径存储为文件名,则始终可以使用这些函数创建绝对路径。使用或
要获取Documents文件夹的路径,请检查用户的输入是否以该路径开始,如果是,请使用从该路径创建相对路径。稍后,您可以再次检索当前文档文件夹路径,并使用将相对路径附加到其中。回答我自己的问题。事实证明,编程技巧是不必要的
另见:
,
我发现了问题的根本原因。“我的文档”连接没有指向新位置。我希望Windows7自动将“我的文档”连接更改为新位置,但它没有。我可以通过在命令行中运行下面的cmd代码来修复这个问题
:: Run this as admin
:: Delete the wrong junction which points to "C:\Users\{username}\Documents"
rmdir "My Documents"
:: Create a new junction to the new My Documents folder
mklink /J "My Documents" "D:\MyData\Documents"
:: Change the attributes of the junction, not the folder it points to
attrib +H +S +I "My Documents" /L
icacls "My Documents" /setowner SYSTEM /L
icacls "My Documents" /deny Everyone:(RD) /L
存储路径的正确方法是:
“C:\Users{username}\My Documents…”
如果这不起作用,则可能是由Windows7创建的不正确连接引起的。可以使用上面的cmd代码修复连接。返回当前位置。如何存储决定数据是指定“正常”路径还是相对路径的信息取决于您。SHGetFolderPath
不推荐使用,即使它仍然有效。。。我不建议使用它:-)@Jcl,这就是为什么我还提到了KNOWNFOLDERID
等价物。OP没有说明正在使用哪个版本的Windows。XP上不存在KNOWNFOLDERID
API,尽管Microsoft不再支持该API,但XP仍然是使用/code的流行版本CSIDL
可以在XP和更早版本中使用,KNOWNFOLDERID
可以在Vista和更高版本中使用。这并不能回答提问者提出的问题-1.