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

My Documents Path Re-directing to OneDrive Path

我将从非常简单的代码开始



    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 设置给正在 运行 应用程序的“我的文档”文件夹中的用户。

代码设置Initial Directory的路径为:C:\Users\Aaron\Documents,即测试用户我的文档目录

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

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

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

编辑:我应该更新这个。第二天我又 运行 我的项目,问题不再发生。我也没有更改我的代码。这一定是侥幸。

对话框不应打开 "OneDrive\Documents"。可能是您已将 "Documents" 文件夹重定向到 OneDrive 的文件夹,但由于您或多或少对路径进行了硬编码,这似乎不太可能。

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

的未来版本中存在

要查找用户的 "My Documents" 文件夹(或在 Vista 及更高版本上为 "Documents"),请使用:

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", 无)

不,当用作 openFile 对话框的 initialDirectory 参数时,它不会! 但是这样做:

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

OpenFileDialog1.InitialDirectory = 用户文件夹 & "\AppData\Roaming\Microsoft\Windows\Libraries\Documents.library-ms"

-更新

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

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

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

将 OpenPersoFolder 变暗为字符串 将 UserFolders 调暗为字符串 = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) OpenPersoFolder = UserFolders & "\AppData\Roaming\Microsoft\Windows\Libraries\Documents.library-ms"

然后: OpenFileDialog1.InitialDirectory = OpenPersoFolder 但: Directory.CreateDirectory(PersoFolder & "\" & [新文件夹名称])

"Curiouser and curiouser!" 正如爱丽丝曾经说过的那样。如果我不知道,我会说微软有人在胡闹!

P.S。只要它有效,我就不会太在意它是否冗长,但无论如何还是感谢您提供的信息。

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

.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

然后 tadam ^^ 它打开回本地 mydocuments 文件夹....