0

我有一个程序可以从日志文本文件中“greps”出各种目录路径,并根据单词打印各种结果。

目录路径示例:

  • C:/文档和设置/所有用户/桌面/AccessData FTK Imager.lnk

  • C:/文档和设置/所有用户/开始菜单/程序/AccessData

  • C:/Documents and Settings/Administrator/Desktop/AccessData FTK Imager.exe:Zone.Identifier

因此,如何在最后一个“/”之后查找文件或文件夹名称?这是为了帮助程序识别文件和文件夹。请注意多个“。” 和目录路径中的空格。等“Imager.exe:Zone.Identifier”。因此很难使用if(!name.contains()".")

等如何从路径字符串中获取“AccessData FTK Imager.lnk”或“AccessData”或“AccessData FTK Imager.exe:Zone.Identifier”?!

有人可以建议解决此问题的方法或代码吗?谢谢!

代码:

if (!token[7].Contains("."))
                {    

                    Console.WriteLine("The path is a folder?");

                    Console.WriteLine(token[7]);

                    Console.WriteLine(actions);

                    MacActions(actions);

                    x = 1;
                } 
4

6 回答 6

1

使用Path.GetFileName.

路径中最后一个目录字符之后的字符。如果 path 的最后一个字符是目录或卷分隔符,则此方法返回 String.Empty。

于 2010-12-17T14:20:51.550 回答
1

处理文件路径时使用 Path 类,处理实际文件和文件夹时使用 File 和 Directory 类。

string str1=@"C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk";
string str2=@"C:/Documents and Settings/All Users/Start Menu/Programs/AccessData";
string str3=@"C:/Documents and Settings/Administrator/Desktop/AccessData FTK Imager.exe:Zone.Identifier";

Console.WriteLine(Path.GetFileName(str1));
Console.WriteLine(Path.GetFileName(str2));
Console.WriteLine(Path.GetFileName(str3));

输出:

AccessData FTK Imager.lnk
AccessData
Zone.Identifier <-- it chokes here because of the :

这个类对字符串进行操作,因为我的系统上没有那些特定的文件和/或文件夹。也无法确定AccessData是文件夹还是没有扩展名的文件。

我可以使用一些常识,将带有扩展名的所有内容声明为文件(Path.GetFileExtension可以在此处使用),将其他所有内容声明为文件夹。
或者我可以使用 (File.ExistsDirectory.Exists分别) 检查有问题的字符串确实是我机器上的文件或文件夹。

if (File.Exists(str2))
    Console.WriteLine("It's a file");
else if (Directory.Exists(str2))
    Console.WriteLine("It's a folder");
else
    Console.WriteLine("It's not a real file or folder");
于 2010-12-17T14:20:57.550 回答
1

这是为了帮助程序识别文件和文件夹

没有办法确定一个路径是代表一个文件还是文件夹,除非你访问实际的文件系统。像“Foo.exe”这样的目录名是完全有效的,没有扩展名的文件(“Foobar”)也是有效的。

于 2010-12-17T14:23:27.853 回答
1

像你正在做的那样用“/”标记它怎么样......然后你就会知道最后一个标记是文件,而它之前的任何东西都是路径。

于 2010-12-17T14:24:37.203 回答
0

您可以简单地用 / 分割整个字符串

例如:

string a="C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk"; string[] words=a.split('/'); int len=words.length; 所以现在 words[len] 返回最后一个斜杠(/)之后的数据..希望你理解......

于 2010-12-17T14:26:43.967 回答
0

我猜你只有一个代表文件名的字符串,如果是这种情况你不能确定。将文件夹命名为Folder.doc. 因此,如果您无法访问实际的文件系统,则很难检查。您可以通过使用正则表达式来接近:

(.*\\)(.+)(\..*)

试试看:http ://www.regexplanet.com/simple/index.html 如果您在第 3 组中得到任何输出,则很可能它是一个文件而不是文件夹。如果您没有得到一些输出,请直接尝试以下操作:

(.*\\)(.+)(\..*)?

这将为您提供第 2 组中的文件夹。

于 2010-12-17T14:26:58.857 回答