2017-06-23 43 views
2

命名標準,我們有來自第三方供應商的過程砸銷售和invetory數據日常生活,並可能有以下任何一種情況下檢查文件是否存在,並有權利在C#

  1. 刪除正確的文件。 (命名標準:test.xls)

  2. 刪除正確的文件,但沒有遵循正確的命名標準。 (其他 名稱可能是test_mmddyyyy或testmmddyyyy)

  3. 沒有文件丟失。

我試圖建立一個圍繞這些場景我的邏輯,並停留在如何當文件存在,但沒有合適的命名標準,並檢查此條件和更改文件的名稱,以建立自己的邏輯適當的命名標準。

public void Main() 
{ 
    try 
    { 
     string filefullpathname = @"C:\Temp\test.xls"; 

     if (File.Exists(filefullpathname) == false) 
     { 
      Console.WriteLine("File does not exist in the path"); 
     } 

     // file exists but right naming standard not followed (Other names could be test_mmddyyyy or testmmddyyyy) 
     // how to check for this condition and change the name of the file to the naming standard 
     else 
     { 
      string dirname = @"C:\Temp\"; 
      DirectoryInfo directory = new DirectoryInfo(dirname); 
      string filepartialname = "test"; 

      FileInfo[] fileindirectory = directory.GetFiles(filepartialname + "*"); 

      foreach (FileInfo filename in fileindirectory) 
      { 
       string fullname = filename.FullName; 
       bool ind = Path.HasExtension(fullname); 

       if (ind == false) 
       { 
        File.Move(fullname, directory + filepartialname + ".xls"); 
       } 
       else 
       { 
        File.Move(fullname, directory + filepartialname + ".xls"); 
       } 
      } 
     } 

     Dts.TaskResult = (int)ScriptResults.Success; 
    } 

    catch (Exception error) 
    { 
     Console.WriteLine(error); 
    } 
} 
+0

你能舉一個具體的例子,請?文件名是什麼常數,並且是你提到的唯一可能的格式的3種格式? – Mat

+0

我會從檢查文件夾中文件的日期開始,所以通過減少日期並獲取第一個文件。 :string filename = new DirectoryInfo(@「C:\ Temp」)。GetFiles(「*。xls」)。OrderByDescending(x => x.LastWriteTime).FirstOrDefault()。FullName; – jdweng

+0

「測試」文件的名稱是恆定的,每天只有一個文件,並且每當自動作業失敗時,名稱和擴展名將更改爲「test_mmddyyyy.zip」,「testmmddyyyy.zip」,「test_mmddyyyy .xls「,」testmmddyyyy.xls「。 – PVB

回答

0

這是不是真的很清楚,如果它只是文件名或缺少的擴展名。所以我把兩者都放進去了。

public void Main() 
    { 
     try 
     { 
      string dirname = @"C:\Temp\"; 
      DirectoryInfo directory = new DirectoryInfo(dirname); 
      string filepartialname = "test"; 

      FileInfo[] fileindirectory = directory.GetFiles(filepartialname + "*"); 

      foreach (FileInfo filename in fileindirectory) 
      { 
       if (filename.Extension == "") 
       { 
        //doesn't have an extension        
       } 
       else if (!Regex.IsMatch(filename.Name.Replace(filename.Extension, ""), @"^[A-Z|a-z]$")) 
       { 
        //contains more then just test 
       } 
       else 
       { 
        //file is good 
       } 
      } 
     } 
     catch (Exception error) 
     { 
      Console.WriteLine(error); 
     } 
    } 
0

您對您輸入的可能是什麼的解釋,以及如何要移動這些投入不超清晰,但這應該讓你開始:

var expectedFilename = Path.Combine(someOtherDirectory, "test.xls"); 

// Matches test* and *.xls 
var relevantFiles = Directory 
    .EnumerateFiles(searchDirectory, "*", SearchOption.TopDirectoryOnly) 
    .Where(f => Path.GetFileName(f).StartsWith("test") || Path.GetExtension(f).Equals(".xls")) 

foreach (var file in relevantFiles) 
{ 
    // If there's more than one file matching the pattern, last one in wins 
    File.Move(file, expectedFilename); 
}