【发布时间】:2012-10-26 22:23:39
【问题描述】:
我发现在下面的代码中使用 Path.GetFileName() 可以按我的意图工作,并为我提供正确文件夹的名称,但如果我使用 Path.GetDirectoryName() 它会返回父 (UserGeneratedContent) 文件夹的名称。当两种方法都以字符串的形式传递相同的路径时,为什么会发生这种情况?为什么Path.GetFileName() 在目录上工作?
当我使用 Path.GetFileName() 时,Treeview 中节点的文本是它找到的文件夹的文本 - 这是我想要发生的事情,但如果我使用 Path.GetDirectoryName(),则文本是 的完整路径@"UserGeneratedContent" 为每个节点关闭。为什么会这样?
最后,我的代码可以改进吗?
private void CheckForBaseFolder()
{
if (Directory.Exists(@"UserGeneratedContent"))
{
DirectoryInfo info = new DirectoryInfo(@"UserGeneratedContent");
DirectoryInfo[] subdirs = info.GetDirectories();
if (subdirs.Length != 0)
{
string path = Path.Combine(@"UserGeneratedContent", subdirs[0].ToString());
treeView1.Nodes.Add(CheckForSubFolders(path));
treeView1.SelectedNode = treeView1.Nodes[0];
}
else { MessageBox.Show("No User-Generated Folders Or Files Found"); }
}
else { Directory.CreateDirectory(@"UserGeneratedContent"); }
}
private TreeNode CheckForSubFolders(string path)
{
TreeNode folder = new TreeNode(path);
folder.Text = Path.GetFileName(path); // Works as intended, but.....
folder.Text = Path.GetDirectoryName(path); // Returns the parent folder
foreach(var subdirectory in Directory.GetDirectories(path))
{
folder.Nodes.Add(CheckForSubFolders(subdirectory));
}
folder.ImageIndex = 0;
folder.SelectedImageIndex = 1;
return folder;
}
【问题讨论】:
-
可能是错字?他们都调用同一个函数..
-
@Simon Whithead - 是的错字,现在修正。感谢您指出。
-
你能在某处弹出
path的示例值吗? -
路径名不明确。取一个像
c:\foo\bar这样的路径名。那是一个 目录 名称栏吗?还是 foo 目录中名为 bar 的 file ?找出答案的唯一方法是点击磁盘并检查。 Path 类拒绝这样做。
标签: c# winforms path treeview directory