【问题标题】:CreateDirectory creates Duplicate Directory in Public FolderCreateDirectory 在公用文件夹中创建重复目录
【发布时间】:2019-05-21 13:28:39
【问题描述】:

我有一个 Winforms 应用程序,如果该目录不存在,它应该在 Public Documents 文件夹中创建一个子目录并将一个文本文件保存到其中。但是,如果子目录不存在,它实际上会在“C:/Users/Public”下创建另一个名为Public Documents 的目录,而不是在现有的“C:/Users/Public”文件夹下创建一个子目录。 (在下面的示例中,子目录是变量 'token'。)所以我最终得到了 2 个名为 Public Documents 的文件夹:

这是我的代码:

        if (result == DialogResult.Yes)
        {

            subPath = @"C:\Users\Public\Public Documents\" + token + @"\Tests\";

        }
        else if (result == DialogResult.No)
        {
            subPath = @"C:\Users\Public\Public Documents" + @"\Tests\";
        }
        TestModel testCall = new TestModel
        {
            Name = frm.fileName,
            MethodName = txtApiMethod.Text,
            Parameter = rtxtJson.Text,
            SchemaKey = txtSchemaKey.Text
        };
        bool exists = System.IO.Directory.Exists(subPath);
        string fileName = frm.fileName + ".txt";
        string json = JsonConvert.SerializeObject(testCall);
        string filePath = subPath + fileName;
        if (!exists)
        {
            System.IO.Directory.CreateDirectory(subPath);
        }
        using (StreamWriter file = File.CreateText(filePath))
        {
            file.Write(json);

        }

谁能告诉我为什么要创建一个重复的命名目录,以及我可以做些什么来在现有目录下创建一个新的子目录?

非常感谢任何帮助!

【问题讨论】:

  • 您是否调试过存在返回的内容?根据 Microsoft 文档,如果您没有正确的权限,这将始终返回 false,这将使您创建一个新目录。尝试以管理员身份执行您的程序
  • 你是对的。仅针对公共目录进行测试时“ bool exists2 = System.IO.Directory.Exists(@"C:\Users\Public\Public Documents\");"它返回假。我认为公共目录应该具有共享的读/写权限并且不需要管理员。那么这不会导致任何问题,因为每个用户都不会成为管理员?
  • 我认为@Cid 是在正确的轨道上,虽然我告诉你的是真的,它是公用文件夹的事实意味着它应该可以从任何人(管理员或非管理员)访问。如果您没有任何权限或文件夹不存在,该函数将返回 false。我认为您指向的是链接路径,而不是真实路径

标签: c# windows file-io


【解决方案1】:

C:\Users\Public\Public Documents 是一个显示名称。我有一个法式 Windows,显示名称是 C:\Users\Public\Documents publics

真正的路径是C:\Users\Public\Documents

显示:

真实的:

为确保您使用的是正确的文件夹路径(出于某些原因,可以使用 d:,或者路径可能完全不同。切勿使用硬编码路径),您可以使用链接到C:\Users\Public\DocumentsSystem.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonDocuments);,如:

var PublicDocuments = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonDocuments);
if (result == DialogResult.Yes)
{
    subPath = PublicDocuments + @"\"+ token + @"\Tests\";
}
else if (result == DialogResult.No)
{
    subPath = PublicDocuments + @"\Tests\";
}

有关System.Environment.SpecialFolderSystem.Environment.GetFolderPath() 的更多信息,请参阅文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多