2011-04-02 61 views
0

使用Windows 7-32位中的Net Framework 3.5进行VB2008中的编码。My.Computer.FileSystem.SpecialDirectories.MyDocuments在VB2008中返回错误的文件夹名称

代码:

TempUserPath = My.Computer.FileSystem.SpecialDirectories.MyDocuments 

返回字符串"C:\Users\Owner\Documents"但该文件夹实际上是一个名为"My Documents"(即是在Finder "C:\Users\Owner\My Documents")。

当我尝试在Owner目录中创建一个名为"Documents"的新文件夹时,Windows询问我是否想要将其内容与My Documents文件夹合并。如果我说是的,我只剩下我的文档文件夹,没有一个名字为"Documents"

因此,当我尝试读取或写入文件到TempUserPath位置时,出现"access denied"错误。甚至在我手动将文件夹的名称从"My Documents"更改为"Documents"后,会发生这种情况。

有谁知道为什么Windows在VB环境下似乎将文件名"Documents""My Documents"等同起来,以及我如何解决这个问题?

+0

您正在编程机器,而不仅仅是使用它。你会发现它在引擎盖下发生了什么,而不仅仅是它看起来像什么。磁盘*上的该目录被命名为“文档”。使用cmd.exe查看真正存在的内容。 – 2011-04-02 17:20:58

回答

0

我的文档&这种情况下的文档是一样的。使用不同的文件夹名称。

0

您看到的文件夹My Documents并不存在,它是具有实际文档文件夹内容的虚拟文件夹。您还将在自己的文档文件夹中看到用户PublicPublic Documents文件夹的内容。

代码正确返回存储文件的实际物理文件夹的名称。您可以将该文件夹的位置移动到任何位置,因此它可以是D:\Birds\Pelicans,但您仍然可以在主目录中将它看作My Documents

如果您在尝试从文件夹中读取时遇到拒绝访问错误,您的程序根本没有适当的权限。它与虚拟文件夹名称没有任何关系。

+0

感谢大家的建议,但我认为我需要使用我的文档文件夹,因为我正在编写学生在大学服务器上使用的程序。此外,这是一个成熟的程序,一直在使用此代码在XP中正常运行。当我在Win 7中运行它时,它会给我报告的错误。所以Win 7处理这个问题的方式与XP不同。该文件夹具有为所有者设置的完整权限。 – 2011-04-02 20:31:25

+0

我只是在XP机器上重新输入相同的代码,并返回字符串“C:\ Users \ Owner \ My Documents”,并且文件正确写入该文件夹。因此,Win 7中的处理与XP中的处理有所不同。 – 2011-04-02 20:38:59

0

我刚试过,对我来说工作得很好。

Dim TempUserPath As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments 
    IO.File.WriteAllText(IO.Path.Combine(TempUserPath, "TEST.txt"), "TEST") 

你可能会尝试暂时设置你的mydocuments文件夹给每个人有完全控制权,看看它是否是一个权限问题。

相关问题