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

时间:2015-09-15 23:55:01

标签: c# .net openfiledialog onedrive documents

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



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

代码将初始目录的路径设置为:C:\Users\Aaron\Documents,即测试用户My Documents Directory。

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

这发生在我的两台机器上,而不是我的朋友机器上。

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

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

3 个答案:

答案 0 :(得分:1)

对话框不应该打开" OneDrive \ Documents"。可能是您重定向了" 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;
}

答案 1 :(得分:0)

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

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

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

OpenFileDialog1.InitialDirectory = UserFolders& " \应用程序数据\漫游\微软\的Windows \库\ Documents.library-MS"

- 更新

新问题:您无法使用UserFolders& " \应用程序数据\漫游\微软\的Windows \库\ Documents.library-MS"除了openFile的initialDirectory参数以外的任何东西!如果您使用它来尝试创建子目录,它将无法工作。子目录变为""。但我注意到从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变暗为String Dim UserFolders as String = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) OpenPersoFolder = UserFolders& " \应用程序数据\漫游\微软\的Windows \库\ Documents.library-MS"

然后: OpenFileDialog1.InitialDirectory = OpenPersoFolder 但: Directory.CreateDirectory(PersoFolder&" \"& [New Folder Name])

" Curiouser和curiouser!"正如爱丽丝曾经说过如果我不知道更好,我会说微软的某个人一直在搞乱!

P.S。只要它有效,我就不会感到烦恼,但无论如何都要感谢信息。

答案 2 :(得分:0)

我刚遇到与你相同的问题。 我尝试了以下

.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文件夹....