2011-12-14 31 views
5

Hiện nay chúng tôi có một giải pháp mà lấy tên tập tin từ URL sử dụng nàyBắt Tên tập tin từ url trong C#

currentFile = Path.GetFileNameWithoutExtension(url); 

Chúng tôi thấy rằng nếu có chuỗi truy vấn kèm theo bao gồm ký tự như dấu ngoặc kép nó sẽ trả về với một lỗi của các ký tự không hợp lệ trong đường dẫn.

Ví dụ, nếu url là

http:\\myurl.com\mypage.aspx?utm_content=This+Is+"Broken" 

Sau đó, nó sẽ không nhận được tên tập tin. Có cách nào tốt hơn, sạch hơn để có được "mypage"?

+0

Có thể bạn không chỉ loại bỏ các chuỗi truy vấn từ url trước khi gọi GetFileNameWithoutExtension? –

+0

kiểm tra này: http://stackoverflow.com/a/6015377/559144 và bỏ phiếu cho anh ta nếu nó giải quyết vấn đề của bạn ;-) –

+0

bạn đã thử Server.UrlEncode (url); trước khi nhận được tên tập tin? –

Trả lời

15

sử dụng này: Uri.AbsolutePath

Request.Url.AbsolutePath 
+1

+1 Để không phát minh lại bánh xe. –

+15

'string filename = Path.GetFileName (new Uri (myUrlString) .AbsolutePath);' – jocull

3

Tôi chỉ tìm thấy ? và nếu nó tồn tại, hãy bỏ phần còn lại của chuỗi, sau đó sử dụng nó để GetFileNameWithoutExtension.

Ví dụ:

 string url; 
     int index; 

     index = url.IndexOf("?"); 
     if (index != -1) 
     { 
      url = url.Substring(0, index); 
     } 
     currentFile = Path.GetFileNameWithoutExtension(url); 
+0

+1 tốt nhất cho tôi. – Etch

+0

đây là cách phức tạp hơn và tiết hơn so với những gì khuôn khổ đã cung cấp: Request.Url.AbsolutePath –

+1

@DavidePiras: Tại sao bạn giả định rằng URL được xử lý là url yêu cầu? OP không đề cập đến điều này trong câu hỏi ban đầu. Giải pháp mà tôi đã cung cấp là phản hồi trực tiếp cho mã được đăng của họ mà chỉ tham chiếu một URL. Url này có thể từ tệp nhật ký, có thể là từ chuỗi giới thiệu hoặc từ trang HTML được phân tích cú pháp có tham chiếu được nhúng. –

0

HttpContext.Current.Request.PhysicalPath sử dụng thay vì URL đầy đủ như tham số vào phương pháp Path.GetFileNameWithoutExtension.

Hope this helps,

Các vấn đề liên quan