2014-04-30 66 views
-1

我需要獲得最後一部分,是指下列文字的數值(318,319)(會有所不同)獲取文件名的C#中的最後一部分

C:\Uploads\X\X-1\37\Misc_318.pdf 
C:\Uploads\X\X-1\37\Misc_ 319.pdf 
C:\Uploads\X\C-1\37\Misc _ 320.pdf 

一旦我得到這個值我需要搜索整個文件夾。一旦我找到文件名稱相匹配的電話號碼,我需要刪除所有的空格,並在特定的文件夾

這裏,文件重命名爲我想

  • 首先得到該文件的最後部分是什麼(數字號碼可能會有所不同
  • 根據我在文件夾中搜索的數字來獲取所有文件名
  • 一旦我得到所有文件名稱,請檢查文件名的空格並刪除空格。
+3

你的失敗嘗試在哪裏? –

+0

你想要捕捉多少個字符?您是否想要在名稱末尾捕獲所有數字字符,或只是在擴展名前的最後3個字符? – ElGavilan

+0

你是什麼意思最後一部分?只是文件名?如果你的意思是沒有路徑的文件名比Path.GetFileName – milagvoniduak

回答

6

查找號碼

如果命名遵循約定SOMEPATH \ SomeText_ [可選空間] 999.pdf,嘗試

var file = System.IO.Path.GetFileNameWithoutExtension(thePath); 
string[] parts = file.split('_'); 
int number = int.Parse(parts[1]); 

當然,添加錯誤檢查適當。您可能需要檢查分割後是否有2個部分,並且可能使用int.TryParse()取決於您是否確信文件名將遵循該模式以及如果TryParse()返回false可恢復的能力。

構建新的文件名

我不完全理解你想做的事,一旦你有什麼號。但是,如果這是您需要的,請查看Path.Combine()以構建新路徑,並且您可以使用Directory.GetFiles()在所需目錄中搜索特定文件名或匹配模式的文件。

去掉空格

如果您有空格的文件名,並且希望所有的空格去掉,你可以做

string newFilename = oldFilename.Replace(" ", ""); 
+1

'int number = int.Parse(parts.Last()) ;'如果有多個'_'的話。 –

+0

@HamletHakobyan:如果超過2個部分,它實際上可能是一個錯誤條件。取決於域的要求。調用Last()可能會掩蓋合法錯誤。 –

1

下面是一個使用正則表達式的解決方案:

var s = @"C:\Uploads\X\X-1\37\Misc_ 319.pdf"; 
var match = Regex.Match(s, @"^.*?(\d+)(\.\w+)?$"); 
int i = int.Parse(match.Groups[1].Value); 
// do something with i 

它應該有或沒有任何長度的擴展(只要它是一個擴展名,不像my file 123.tar.gz)。

相關問題