Neeraj Verma
Neeraj Verma

Reputation: 2314

C# cut file Name from Path

I am creating an Image Extraction tool and I am able to retrieve the Images with full path..

For Example:

enter image description here

I need to cut the File name (rss) from path...

I search posts and Tried following

//1.
 //string str = s.Split('/', '.')[1];

//2.    
            string s1;

               // string fileName = "abc.123.txt";
                int fileExtPos = s.LastIndexOf(".");
                if (fileExtPos >= 0)
                    s1 = s.Substring(0, fileExtPos);


//3.
                //var filenames = String.Join(
                //    ", ",
                //    Directory.GetFiles(@"c:\", "*.txt")
                //       .Select(filename =>


//4.
                //           Path.GetFileNameWithoutExtension(filename)));

None seems to be working

I want the name between "images" and "png" ..What can be the exact code?

Any Suggestion will be helpful

Upvotes: 4

Views: 4868

Answers (2)

user128511
user128511

Reputation:

In your example you're using a uri so you should use System.Uri

System.Uri uri = new System.Uri(s);
string path = uri.AbsolutePath;
string pathWithoutFilename = System.IO.Path.GetDirectoryName(path);

Why use Uri? Because it will handle things like

http://foo.com/bar/file.png#notthis.png
http://foo.com/bar/file.png?key=notthis.png
http://foo.com/bar/file.png#moo/notthis.png
http://foo.com/bar/file.png?key=moo/notthis.png
http://foo.com/bar/file%2epng

Etc.

Here's a fiddle

You should use the various System.IO.Path functions to manipulate paths as they work cross platform. Similarly you should use the System.Uri class to manipulate Uris as it will handle all the various kinds of edge cases like escaped characters, fragments, query strings, etc.

Upvotes: 0

Steve
Steve

Reputation: 216293

Just use the class Path and its method GetFileNameWithoutExtension

string file = Path.GetFileNameWithoutExtension(s);

Warning: In this context (just the filename without extension and no arguments passed after the URL) the method works well, however this is not the case if you use other methods of the class like GetDirectoryName. In that context the slashes are reversed into Windows-style backslashes "\" and this could be an error for other parts of your program

Another solution, probably more WEB oriented is through the class Uri

Uri u = new Uri(s);
string file = u.Segments.Last().Split('.')[0];

but I find this a lot less intuitive and more error prone.

Upvotes: 5

Related Questions