- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现在下面的代码中使用 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/
当我使用OpenFileDialog 打开文件时,当然我需要获取文件目录 及其名称 来加载文件。(加载 xml,访问我需要完整路径的文件。) opd 是 OpenFileDialog
我正在尝试执行一个工具exe,它与主exe位于同一目录中。为此,我尝试首先使用 Assembly.GetExecutingAssembly 获取进程的 exe 名称,然后使用 IO.Path.GetD
我正在尝试执行与主 exe 位于同一目录中的工具 exe。为此,我尝试首先使用 Assembly.GetExecutingAssembly 获取进程的 exe 名称,然后使用 IO.Path.GetD
我在 .Net Core 2 中有一个测试用例,我在其中向 Path.GetDirectoryName 提供以下输入。 @"C:" + Path.DirectorySeparatorChar 当我在测
Path.GetDirectoryName(@"C:\\"); 返回 null 和 Path.GetDirectoryName(@"C:\\Foo"); 返回 C:\ 虽然这正是 documentat
public static void Main() { // testing file name var fileName = "\\\\server7\\EmailA
我发现在下面的代码中使用 Path.GetFileName() 可以按照我的意图工作,并为我提供正确文件夹的名称,但是如果我使用 Path.GetDirectoryName() 它返回父 (UserG
string path = Path.GetDirectoryName( Assembly.GetAssembly(typeof(MyClass)).Code
我想使用斜杠而不是反斜杠,因为我的应用程序与 ftp 通信,不允许将反斜杠作为目录分隔符。 有没有自己写方法的捷径/配置? 最佳答案 窃取@Tejs 评论作为答案。 由于 GetDirectoryNa
我正在尝试构建我的 .Net Core 解决方案,但收到了我无法弄清楚的错误消息; 2017-05-22T14:30:56.2490242Z _TransformWebConfig: 2017-05-
我是一名优秀的程序员,十分优秀!