我的文档路径重定向到 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 文件夹....
我将从非常简单的代码开始
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 文件夹....