Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CreateDirectory在公用文件夹中创建重复目录_C#_Windows_File Io - Fatal编程技术网

C# CreateDirectory在公用文件夹中创建重复目录

C# CreateDirectory在公用文件夹中创建重复目录,c#,windows,file-io,C#,Windows,File Io,我有一个Winforms应用程序,如果目录不存在,它应该在Public Documents文件夹中创建一个子目录,并在其中保存一个文本文件。但是,如果子目录不存在,它实际上会在“C:/Users/Public”下创建另一个名为Public Documents的目录,而不仅仅是在现有的“C:/Users/Public”文件夹下创建一个子目录。(在下面的示例中,子目录是变量“token”。)因此我最终得到了两个名为Public Documents的文件夹: 这是我的密码: if (

我有一个Winforms应用程序,如果目录不存在,它应该在Public Documents文件夹中创建一个子目录,并在其中保存一个文本文件。但是,如果子目录不存在,它实际上会在“C:/Users/Public”下创建另一个名为Public Documents的目录,而不仅仅是在现有的“C:/Users/Public”文件夹下创建一个子目录。(在下面的示例中,子目录是变量“token”。)因此我最终得到了两个名为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);

        }
有人能告诉我为什么要创建一个重复的命名目录,以及我能做些什么才能在现有目录下创建一个新的子目录吗


非常感谢您的帮助

C:\Users\Public\Public Documents
是一个显示名称。我有一个法语窗口,显示名称是
C:\Users\Public\Documents publics

real路径是
C:\Users\Public\Documents

显示:

真实:

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

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\";
}

有关和

C:\Users\Public\Public Documents
是一个显示名称的更多信息,请参阅文档。我有一个法语窗口,显示名称是
C:\Users\Public\Documents publics

real路径是
C:\Users\Public\Documents

显示:

真实:

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

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\";
}

有关的更多信息,请参阅文档,并且

您是否调试了正在返回的现有内容?根据Microsoft文档,如果您没有正确的权限,这将始终返回false,这将使您创建一个新目录。请尝试以管理员身份执行您的程序,您是正确的。当只测试公共目录“bool exists2=System.IO.directory.Exists”(@“C:\Users\public\public Documents\”)时,它返回false。我认为公共目录应该具有共享读/写权限,并且不需要管理员。这会不会导致任何问题,因为每个用户都不会成为管理员?我认为@Cid的做法是正确的,虽然我告诉你的是事实,但它是公用文件夹这一事实意味着任何人(无论是否是管理员)都可以访问它。如果您没有任何权限或文件夹不存在,则函数返回false。我想你指向的是一个链接路径,而不是真实的路径。你调试过存在的东西返回了吗?根据Microsoft文档,如果您没有正确的权限,这将始终返回false,这将使您创建一个新目录。请尝试以管理员身份执行您的程序,您是正确的。当只测试公共目录“bool exists2=System.IO.directory.Exists”(@“C:\Users\public\public Documents\”)时,它返回false。我认为公共目录应该具有共享读/写权限,并且不需要管理员。这会不会导致任何问题,因为每个用户都不会成为管理员?我认为@Cid的做法是正确的,虽然我告诉你的是事实,但它是公用文件夹这一事实意味着任何人(无论是否是管理员)都可以访问它。如果您没有任何权限或文件夹不存在,则函数返回false。我认为您指向的是链接路径,而不是实际路径