摘要: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;
}
}
章立民研究室