我正在创建一个图像提取工具,我能够以完整路径检索图像..
例如:
我需要从路径中删除文件名(rss)
我搜索帖子并尝试跟随
//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)));
似乎没有工作
我希望"图像"之间的名称和" png" ..什么是确切的代码?
任何建议都会有所帮助
答案 0 :(得分:4)
只需使用课程Path及其方法GetFileNameWithoutExtension
即可string file = Path.GetFileNameWithoutExtension(s);
警告:在此上下文中(只是没有扩展名且没有在URL之后传递参数的文件名),该方法运行良好,但是如果您使用类的其他方法(如GetDirectoryName)则不是这种情况。在该上下文中,斜杠反转为Windows样式的反斜杠“\”,这可能是程序其他部分的错误
另一种解决方案,可能更多面向WEB,是通过类Uri
Uri u = new Uri(s);
string file = u.Segments.Last().Split('.')[0];
但是我发现这更不直观,更容易出错。
答案 1 :(得分:0)
在您的示例中,您使用的是uri,因此您应该使用System.Uri
System.Uri uri = new System.Uri(s);
string path = uri.AbsolutePath;
string pathWithoutFilename = System.IO.Path.GetDirectoryName(path);
为什么要使用Uri
?因为它会处理像
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
等
您应该使用各种System.IO.Path
函数来操纵跨平台工作的路径。类似地,您应该使用System.Uri
类来操作Uris,因为它将处理所有各种边缘情况,如转义字符,片段,查询字符串等。