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