我的文档路径重定向到OneDrive路径

本文关键字:路径 OneDrive 重定向 我的 文档 | 更新日期: 2023-09-27 18:13:05

我将从非常简单的代码

开始

    string fileName; // filename of file            
    // get the filename
    using (OpenFileDialog openFileDialog = new OpenFileDialog()) {
          openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
          openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
          openFileDialog.FilterIndex = 1;
          openFileDialog.ShowDialog();
          fileName = openFileDialog.FileName;
    }

我想做的是使用.Net OpenFileDialog.并将InitialDirectory设置为正在运行应用程序的My Documents文件夹的用户。

代码将"Initial Directory"的路径设置为:C:'Users'Aaron'Documents,即测试用户的"My Documents Directory"。

当我运行代码时,OpenFileDialog实际上在目录:C:'Users'Aaron'OneDrive'Documents中打开。这是One Drive的位置

这在我的两台机器上都发生了,但在我朋友的机器上没有。

为什么OneDrive文档文件夹打开时,这不是路径设置为OpenFIleDialog.InitialDirectory ?

编辑:我可能应该更新这个。第二天,我再次运行我的项目,问题不再发生。我也没有改变我的代码。

我的文档路径重定向到OneDrive路径

对话框不应该打开"OneDrive'Documents"。它可能是你已经重定向你的"文档"文件夹到OneDrive的,但因为你或多或少硬编码的路径,这似乎不太可能。

这就是为什么通常你不应该假设用户的文档位于C:'Users'{USERNAME}'Documents中。它可以由用户或组策略更改,并且不保证在未来的Windows版本中存在。

查找用户的"我的文档"文件夹(或Vista及以上版本的"文档"),使用如下命令:

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
所以你的代码应该是:
string fileName; // filename of file            
// get the filename
using (OpenFileDialog openFileDialog = new OpenFileDialog()) {
      openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
      openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
      openFileDialog.FilterIndex = 1;
      openFileDialog.ShowDialog();
      fileName = openFileDialog.FileName;
}

这似乎对我有用:Dim PersoFolder As String = My.Computer.Registry。GetValue("HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'Explorer'Shell Folders", "Personal", Nothing)

不,当用作openFile对话框的initialDirectory参数时,它不会!

将UserFolders设置为String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)

OpenFileDialog1。InitialDirectory = UserFolders &"微软' AppData '漫游' ' Windows '图书馆' Documents.library-ms"

-

新问题:你不能使用UserFolders &"微软' AppData '漫游' ' Windows '图书馆'文档。library-ms"用于除openFile initialDirectory参数之外的任何内容!如果您使用它来尝试创建子目录,它将不起作用。子目录变为"。但是我注意到,从My.Computer.Registry创建的字符串变量。GetValue("HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'Explorer'Shell Folders", "Personal", Nothing)将恢复到正确的值,即用户的文档文件夹,如果您添加子文件夹并使用Directory.CreateDirectory()。所以有一个简单的解决方案:使用两个String变量:

Dim PersoFolder As String = My.Computer.Registry。GetValue("HKEY_CURRENT_USER'Software'Microsoft'Windows'CurrentVersion'Explorer'Shell Folders", "Personal", Nothing)

Dim UserFolders As String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)

将OpenPersoFolder设置为字符串Dim UserFolders as String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)OpenPersoFolder = UserFolders &"微软' AppData '漫游' ' Windows '图书馆' Documents.library-ms"

: OpenFileDialog1。InitialDirectory = OpenPersoFolder但是:目录。CreateDirectory (PersoFolder,"'",[新文件夹名称])

爱丽丝曾经说过:"越来越奇怪!"如果我不知道的话,我会说微软的人在胡闹!

注:我不太在意它是否冗长或不太长,但无论如何,感谢您的信息

我刚遇到和你一样的问题。我尝试了以下命令

.initialdirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
.initialdirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments & "'"
.initialdirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal)
.initialdirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "'"
.initialdirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
.initialdirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "'"

我还尝试将这些值传递给字符串变量。我也试图直接硬编码我自己的mydocuments文件夹进行测试,它总是相同的行为。重定向到onedrive文件夹

然后我改变了这个属性:

 .AutoUpgradeEnabled = False

tamam ^^它打开回到本地mydocuments文件夹....