gpt4 book ai didi

c# - 为什么 Path.GetFileName() 返回正确文件夹的名称,但 Path.GetDirectoryName() 返回它的父文件夹?

转载 作者:行者123 更新时间:2023-11-30 15:01:58 24 4
gpt4 key购买 nike

我发现在下面的代码中使用 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;
}

最佳答案

检查您的代码,您传递的路径不包含文件名,但路径的最后一部分是目录 UserGeneratedContent。 Path.GetFileName 返回 "The characters after the last directory character in path"所以它返回最后一个目录名而不是文件名(你可以创建一个没有扩展名的文件)。当您在同一路径字符串上调用 Path.GetDirectoryName() 时,它会返回 "Directory information for path" .

检查这段代码看看我指的是什么:

假设你在C分区有目录“one”,在目录“one”中有目录“two”,在目录“two”中有一个名为“three.txt”的文件,当你执行这段代码时,它会产生:

string directory = Path.GetFileName(@"C:\one\two");
directory = Path.GetDirectoryName(@"C:\one\two");

目录 将先保存“two”,然后保存“C:\one”

string filename = Path.GetFileName(@"C:\one\two\three.txt");
directory = Path.GetDirectoryName(@"C:\one\two\three.txt");

但是现在,文件名 将包含“three.txt”,目录 将包含“C:\one\two”

编辑:这是稍后在评论后编辑。我会这样修改 CheckForSubFolders 方法:

private TreeNode CheckForSubFolders(string path)
{

TreeNode folder = new TreeNode(path);
string dir = path.TrimEnd(new char[] { '\\' });
int index = dir.LastIndexOf('\\');
folder.Text = dir.Substring(index + 1);

//But I think that it is OK to use folder.Text = Path.GetFileName(path);
//since the filename of some file will never be passed to the CheckForSubFolders method

foreach(var subdirectory in Directory.GetDirectories(path))
{

folder.Nodes.Add(CheckForSubFolders(subdirectory));
}

folder.ImageIndex = 0;
folder.SelectedImageIndex = 1;
return folder;
}

关于c# - 为什么 Path.GetFileName() 返回正确文件夹的名称,但 Path.GetDirectoryName() 返回它的父文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com