【发布时间】: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。我认为您指向的是链接路径,而不是真实路径