Visual C# 2005 – 如何使用萬用字元 *.* 來複製所有檔案

摘要:Visual C# 2005 – 如何使用萬用字元 *.* 來複製所有檔案

原發問問題:

章老師:你好,新年快樂.
IO
與資料存取密訣裡有提到檔案複製及移動目錄
.
但如何使用以前*.*的萬用字來複製所有檔案? 謝謝.請幫忙解答


解答:

親愛的讀者您好

很感謝您對於章立民研究室的支持
有關於您提到的問題
回覆如下

 

圖表1

 

如圖表1所示,程式範例示範如何利用萬用字元 *,來複製資料夾內符合條件的所有檔案,請特別注意我們是如何比對資料夾內的檔案名稱,並執行檔案複製的動作。茲將程式碼列示如下:

private void btnCopyFolder_Click(object sender, EventArgs e)
{
 string[] temp;
 string tempStr;
 string[] fileNames;
 string sourceDir;
 string destinationDir;
 string mappingStr;
 
 try
 {
  sourceDir = textBox1.Text.Substring(0, textBox1.Text.LastIndexOf(@""));
  destinationDir = this.DestionFileTextBox.Text;
 
  //
取得使用者輸入的路徑所代表目錄之檔案名稱集合。
  temp = Directory.GetFiles(sourceDir);
 
  for(int i = 0;i < temp.Length;i++)
  {
   tempStr = temp[i].Substring(temp[i].LastIndexOf(@"") + 1);
   temp[i] = tempStr;
  }
 
  mappingStr =
    textBox1.Text.Substring(textBox1.Text.LastIndexOf(@"") + 1,
    textBox1.Text.Length - textBox1.Text.LastIndexOf(@"") - 2);
 
  //
將陣列排序。
  Array.Sort(temp, new CaseInsensitiveComparer());
  fileNames = temp;
 
  //
搜尋已排序之陣列。
  int fileIndex =
    Array.BinarySearch(
    fileNames, mappingStr, new CaseInsensitiveComparer());

 
  if(fileIndex < 0)
  {
   fileIndex = ~fileIndex;
  }
 
  int matchIndex = 0;
 
  //
計算符合條件的筆數。
  while (fileIndex + matchIndex < fileNames.Length)
  {
   if(!(fileNames[fileIndex + matchIndex].StartsWith(
     mappingStr, StringComparison.CurrentCulture)))
   {
    break;
   }
  
   matchIndex += 1;
  }
 
  string[] returnArray = null;
 
  //
如果有找到符合條件的資料,
  //
則將資料複製到陣列變數。
  if (matchIndex > 0)
  {
   returnArray = new string[matchIndex];
  
   Array.Copy(fileNames, fileIndex, returnArray, 0, matchIndex);
  
   for (int i = 0; i < returnArray.Length; i++)
   {
   
File.Copy(
      sourceDir + @"" + returnArray[i],
      destinationDir + @"" + returnArray[i], true);
   }
  
   //
啟動 Windows 檔案總管。
   Process.Start("explorer.exe", this.DestionFileTextBox.Text);
  }
 }
 catch (Exception ex)
 {
  MessageBox.Show(ex.Message);
 }
}

private void DirectoryBrowseButton_Click(object sender, EventArgs e)
{
 FolderBrowserDialog folderDialog = new FolderBrowserDialog();
 
 folderDialog.RootFolder = Environment.SpecialFolder.MyComputer;

 if (
  (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK))
 {
  this.DestionFileTextBox.Text = folderDialog.SelectedPath;
 }
}

章立民研究室 2007/3/2