2009-05-26 36 views
5

Tôi có một đường dẫn đầy đủ như được đưa ra dưới đây.Cách lấy một phần từ đường dẫn đầy đủ trong C#?

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd 

Làm cách nào để DTD có thể được tìm nạp từ toàn bộ phần này?

mong muốn đầu ra:

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug‌​\DannyGoXuk.DTDs 

Tôi có thể sử dụng phương pháp String 's cho việc này?
Nếu có, thì làm cách nào để tìm nạp?

+4

Hãy viết đầu ra mà bạn muốn từ ví dụ này. Có vẻ như bạn muốn tên tệp, nhưng bạn đang nói "thư mục". – harpo

+0

Tôi muốn có một DTD danh bạ –

+1

Hoặc có lẽ phải có \ nơi có a. sau DTD? – RichardOD

Trả lời

7

Chỉnh sửa: Vui lòng đọc câu hỏi của OP và tất cả các nhận xét của cô ấy cẩn thận trước khi downvotiong này. Câu hỏi tiêu đề của OP không chính xác những gì cô ấy muốn. Câu trả lời của tôi đã cho cô ấy những gì cô ấy cần để giải quyết vấn đề của mình. Đó là lý do tại sao cô bình chọn nó là câu trả lời. Có, câu trả lời của Joel là chính xác nếu trả lời cụ thể câu hỏi tiêu đề. Nhưng sau khi đọc nhận xét của cô ấy, bạn sẽ thấy rằng không chính xác những gì cô ấy đang tìm kiếm. Cảm ơn.

Sử dụng này ...

string strFullPath = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"; 
string strDirName; 
int intLocation, intLength; 

intLength = strFullPath.Length; 
intLocation = strFullPath.IndexOf("DTDs"); 

strDirName = strFullPath.Substring(0, intLocation); 

textBox2.Text = strDirName; 
+0

Cảm ơn JimDel nhưng phần này đã cho tôi o/p "DTDs.xhtml-math-svg-flat.dtd". Tôi chỉ tìm kiếm các DTD. Tôi không muốn tập tin xhtml-math-svg-flat.dtd với nó. –

+0

sử dụng Chuỗi con này thay thế ... strDirName = strFullPath.Substring (0, intLocation); – JimDel

+1

Cảm ơn Jim điều này chỉ tôi đã tìm kiếm ..... –

76

Sử dụng System.IO.Path.GetDirectoryName() cho toàn bộ đường dẫn hoặc new DirectoryInfo(path).Parent.Name chỉ để tên của một thư mục đó.


Không có thư mục nào có tên là "DTD" trong đường dẫn bạn đã đăng. Dường như có một tệp có tên "DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd", nhưng dấu chấm (.) Trong đường dẫn đó không phải là ký tự phân cách thư mục hợp lệ. Ý của bạn là "DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"?

Nếu đó là trường hợp, cho rằng toàn bộ con đường mới, bạn muốn một cái gì đó như thế này để trả về một danh sách các tập tin trong thư mục DTDs:

string path = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"; 
string[] files = new DirectoryInfo(path).Parent.GetFiles(); 

trong cửa sổ thuộc tính tôi chọn Xây dựng Loại dưới dạng tài nguyên được nhúng.

Và bây giờ chúng tôi cuối cùng cũng có được nó. Khi bạn chọn "Tài nguyên được nhúng", mục được nhóm vào tệp chương trình thực thi của bạn. Không có đường dẫn trực tiếp nào nữa. Thay vào đó, hãy đặt Loại Xây dựng của bạn thành "Nội dung" và đặt "Sao chép vào Thư mục Đầu ra" thành "Sao chép Luôn luôn" hoặc "Sao chép nếu Mới hơn".

+0

Không hoạt động.Trong thực tế, nó trả về phần không mong muốn chỉ ... –

+0

Nó cung cấp cho giá trị NULL –

+3

GetDirectoryName ("C: \ Mehrdad \ Test") trả về "C: \ Mehrdad" –

12

Calling

System.IO.Path.GetFileName 

với đường dẫn thư mục đầy đủ trả về phần cuối cùng của con đường mà là một tên thư mục. GetDirectoryName trả về toàn bộ đường dẫn của thư mục gốc không mong muốn.

Nếu bạn có một tên file và bạn chỉ muốn tên của thư mục cha:

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd"); // C:\DTDs 
var directoryName = Path.GetFileName(directoryFullPath); // DTDs 
+1

GetFileName() sẽ trả về "mydtd.dtd" –

+0

GetFileName cho đường dẫn thư mục sẽ trả về phần cuối cùng. Bạn nên gọi nó bằng đường dẫn * *, mà bạn có thể lấy từ GetDirectoryName. Tôi đã giải thích nó trong phần chỉnh sửa. –

+0

Tôi hiểu lầm rằng bạn đang làm một quá trình hai bước-nghĩ rằng bạn đã gọi GetFileName() trên chuỗi ban đầu. –

5
System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(fullPath)) 

Đó sẽ trở lại chỉ là tên của thư mục chứa tập tin.

Đối

C:\windows\system32\user32.dll 

này sẽ trở lại

system32 

Tôi suy luận rằng đó là những gì bạn muốn.

+0

Cảm ơn Harpo u có phần gần với câu trả lời của tôi nhưng ở đây bạn có thư mục phân cách để có được "System32" như thư mục nhưng trong trường hợp của tôi không có "/" điều đó. Trong khi tôi có các tập tin từ các nguồn tài nguyên và các tập tin này là trong thư mục DTDs theo dự án DannyGoXuk.so tôi đang lấy các tập tin này từng người một bằng cách sử dụng vòng lặp foreach và muốn nhận được thư mục DTDs.Which chỉ được đưa ra bởi DannyGoXuk.DTDs.xhtml-math- svg-flat.dtd.where xhtml-math-svg-flat.dtd là một tập tin dtd trong thư mục DTDs trong dự án DannyGoXuk. –

2

Bạn có thể sử dụng:

System.IO.Path.GetDirectoryName(path); 
2

Bạn có thể sử dụng Path ...

Path.GetDirectoryName(myStr); 
2

Không sử dụng chuỗi thao tác trực tiếp. Thay vì sử dụng GetDirectoryName của lớp Path:

System.IO.Path.GetDirectoryName(myPath); 
+0

Nó làm việc hết sức .. –

+0

Điều này làm việc hoàn hảo cho tôi. –

2

Sử dụng các đối tượng FileInfo ...

FileInfo info = new FileInfo(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 
string directoryName = info.Directory.FullName; 

Các tập tin thậm chí không phải thực sự tồn tại. lợi nhuận

+0

Tôi gặp lỗi này .. Không thể chuyển đổi hoàn toàn loại 'System.IO.FileInfo' thành 'System.Reflection.FieldInfo' \t Vì tôi đang sử dụng các tệp trong tài nguyên. –

1

Path.GetDirectory trên con đường bạn đã xác định:

"C: \ Users \ Ronny \ Desktop \ Sources \ Danny \ kawas \ trunk \ CSharp \ ImportME \ XukMe \ bin \ Debug"

Thử bản thân bạn:

var path = Path.GetDirectoryName(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 

Câu hỏi của bạn hơi lạ một chút - không có thư mục nào được gọi là DTD.

+0

DTD thư mục nằm trong dự án DannyGoXuk.i đã nhúng tất cả các tệp tài nguyên vào thư mục DTD. Trong mã tôi muốn tìm thư mục này cách thực hiện, tôi chỉ muốn biết điều này? Cảm ơn .. –

5

Sử dụng:

string dirName = new DirectoryInfo(fullPath).name; 
9

Bạn cũng có thể sử dụng Directory để có được những thư mục từ các đường dẫn tập tin đầy đủ:

Directory.GetParent(path).FullName 
Các vấn đề liên quan