iT邦幫忙

0

【求救】如何查詢到檔名關鍵字後,切割檔案名稱後將切割檔案名稱值帶入。

各位大神們,不好意思,小弟又來求助了。

有關以下程式碼:

DirectoryInfo di = new DirectoryInfo(@"C:\Users\gunji\Desktop\data\");

foreach (var fi in di.GetFiles("*.xml"))
{
                
     Regex regex = new Regex(@"SMRY911");
     Match m = regex.Match(fi.ToString());
     Console.WriteLine(m.Success);

 if (m.Success == true)
 {
    Console.WriteLine("Send To Server : OK");
    string strResult = fi.Name;
    string[] strArray = strResult.Split('_', '.');
    
    formData.Append(new FieldItem("USER", strArray[0]));
    formData.Append(new FieldItem("SHOP", strArray[1]));
    formData.Append(new FieldItem("TERM", strArray[2]));
    formData.Append(new FieldItem("FILETYPE", strArray[3]));
    formData.Append(new FieldItem("SALES_DATE", strArray[4]));
    formData.Append(new FieldItem("CLOSE_COUNTER", strArray[5]));
    formData.Append(new FieldItem("BATCHID", strArray[6]));

    formData.Append(new FileItem("FILE",Path.GetFileName(fi.ToString()), di + fi.ToString()));

               
 }
 else if (m.Success == false)
 {
     Console.WriteLine("Send To Server : NO FILE");
     break;
                 
 }

想實現內容:

 找尋目標資料夾檔案中的檔名關鍵字後,帶出完整檔名並開始切割檔名丟至下方表單內。

例:

 在C:\Users\gunji\Desktop\data\ 下有四個檔案

第一回:

1319_00_SMRY901_20180313.XML
1319_00_SMRY911_20180313.XML
1319_00_SMRY921_20180313.XML
1319_00_SMRY931_20180313.XML

關鍵字內容:SMRY901

找出檔案顯示完整路徑名稱(含附檔名),並將檔名(1319_00_SMRY901_20180313(不含附檔名))切割。

丟至formData.Append(new FieldItem("USER", strArray[0]));裡面。

若有找到檔案回應"Have File",若無"NO File" 。

顯示成果為

formData.Append(new FieldItem("USER",1319 ));
 formData.Append(new FieldItem("SHOP", 00));
 formData.Append(new FieldItem("TERM", SMRY901));
 formData.Append(new FieldItem("FILETYPE", 20180313));

依此類推。

 請問各路大神可以指點一下方向嗎,這裡小弟試過很多方法,雖然上面程式可行,但foreach好像是跟FOR迴圈是一樣的東西所以IF判斷式好像很有問題。

 有想過直接完成後加break;跳出,但總覺得小弟寫的檔案分割,帶入值的程式不是很理想。是否有方式可以更加便捷的方式呢?

看更多先前的討論...收起先前的討論...
雷夢卡爾 iT邦研究生 5 級 ‧ 2018-12-26 09:57:16 檢舉
https://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder

IEnumerable<string> files = Directory
.EnumerateFiles(@"c:\somePath")
.Where(name => Regex.IsMatch(name, "SOME REGEX"));

先找出符合的檔案再處理如何
narumi iT邦新手 5 級 ‧ 2018-12-26 10:35:19 檢舉
好像可行,其實小弟也在研究這寫法,感覺得像SQL的語法啊。
narumi iT邦新手 5 級 ‧ 2018-12-26 10:39:45 檢舉
只是我該如何去驗證他拉出來的東西是我要的?
Console.WriteLine(裡面要顯示什麼?)
narumi iT邦新手 5 級 ‧ 2018-12-26 17:01:18 檢舉
用了一個很笨的方法達成了
IEnumerable<string> files = Directory.GetFiles(@"C:\Users\gunji\Desktop\data\","*.xml")//, SearchOption.AllDirectories .Where(s => s.Contains("SMRY911"));

foreach (var check in files)
{


string[] strArray = Path.GetFileName(check).Split('_', '.');
}

尚未有邦友回答

立即登入回答