开发者

C# How to grep the last word from a directory path?

开发者 https://www.devze.com 2023-01-31 16:03 出处:网络
I have a program that \"greps\" out various directory paths from a log text file and prints various results according to the word.

I have a program that "greps" out various directory paths from a log text file and prints various results according to the word.

Examples of Directory paths:

  • C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk

  • C:/Documents and Settings/All Users/Start Menu/Programs/AccessData

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

Therefore how can I grep out the file or folder name after the last "/"? This is to help the program to identify between files and folder. Please do take note of the multiple "." and white spaces found within a directory paths. etc "Imager.exe:Zone.Identifier". Therefore it is difficult to use if(!name.contains()".")

Etc. How to get the "AccessData FTK Imager.lnk" or "AccessData" or "AccessData FTK Imager.exe:Zone.Identifier" from the path STRING?!

May someone please advise on the methods or codes to solve this problem? Thanks!

The codes:

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

                    Console.Writ开发者_运维百科eLine("The path is a folder?");

                    Console.WriteLine(token[7]);

                    Console.WriteLine(actions);

                    MacActions(actions);

                    x = 1;
                } 


Use the Path class when working with file paths, and use the File and Directory class when working with actual files and folders.

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));

outputs:

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

This class operates on strings, as I do not have those particular files and/or folders on my system. Also it's impossible to determine whether AccessData is meant to be a folder or a file without an extension.

I could use some common sense and declare everything with an extension to be a file (Path.GetFileExtension can be used here) and everything else to be a folder.
Or I could just check it the string in question is indeed a file or a folder on my machine using (File.Exists and Directory.Exists respectively).

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");


Use Path.GetFileName.

The characters after the last directory character in path. If the last character of path is a directory or volume separator character, this method returns String.Empty.


This is to help the program to identify between files and folder

There is no way to determine is a path represents a file or folder, unless you access the actual file system. A directory name like 'Foo.exe' would be perfectly valid, and a file with no extension ('Foobar') would be valid too.


how about tokenized it with "/" like what you're doing ... and then you'll know that the last token is the file, and whatever before it is the path.


You can simply split the whole string by /

e.g.:

string a="C:/Documents and Settings/All Users/Desktop/AccessData FTK Imager.lnk"; string[] words=a.split('/'); int len=words.length; so now words[len] returns the data after last slash(/).. I hope you understand...


I guess you only have a string that represents the name of the file, if that is the case you can't really be sure. It's totally ok to have a folder namen something like Folder.doc. So if you don't have access to the actual file system it is hard to check. You can get close though using regular expression like:

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

Try it on: http://www.regexplanet.com/simple/index.html If you get any output in group number 3 it's likely that it is a file and not a folder. If you don't get some output try this direct after:

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

That will give you the folder in group 2.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号