原發問問題:
章
老師
:
你好
,
新年快樂
.
IO
與數據存取密訣裏有提到文件複製及移動目錄
.
但如何複製整個目錄及目錄下面的全部子目錄及全部文件到某個地方
?
還有如何使用之前
*.*
的通配符來複制全部文件
?
謝謝
.
請幫忙解答
解答:
親愛的讀者您好
很感謝您對於章立民研究室的支持
有關於您提到的問題
回覆以下
若是須要複製整個目錄的內容到另外一個目錄,以
Visual C#
來講,最簡便的方法,就是使用
Microsoft.VisualBasic.Devices
命名空間的
My.Computer.FileSystem
對象之
CopyDirectory
方法,它擁有下列四個多載版本(注:相關參數的用途請參閱
My.Computer.FileSystem. CopyDirectory
方法的說明)
public void CopyDirectory
(
string sourceDirectoryName,
string destinationDirectoryName
)
-
或
-
public void CopyDirectory
(
string sourceDirectoryName,
string destinationDirectoryName,
bool overwrite
)
-
或
-
public void CopyDirectory
(
string sourceDirectoryName,
string destinationDirectoryName,
UIOption showUI
)
-
或
-
public void CopyDirectory
(
string sourceDirectoryName,
string destinationDirectoryName,
UIOption showUI,
UICancelOption onUserCancel
)
請注意:
要使用
Visual Basic
的
My
對象以前,必須先加入對
Microsoft.VisualBasic
的參考,再匯入適當的命名空間,例如:
using Microsoft.VisualBasic.Devices;
就能夠在
C#
中使用與
My
類似的語法來撰寫程序。
圖表1
如圖表
1
所示,程序範例示範如何複製目錄,茲將程序代碼列示以下:
public partial class DemoForm001 : Form
{
...
private void DemoForm001_Load(object sender, EventArgs e)
{
this.showUIComboBox.DataSource =
System.Enum.GetNames(typeof(UIOption));
this.showUIComboBox.SelectedIndex = 1;
this.onUserCancelComboBox.DataSource =
System.Enum.GetNames(typeof(UICancelOption));
this.onUserCancelComboBox.SelectedIndex = 0;
}
private void FileBrowseButton_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderDialog = new FolderBrowserDialog();
folderDialog.RootFolder = Environment.SpecialFolder.MyComputer;
if ((folderDialog.ShowDialog() ==
System.Windows.Forms.DialogResult.OK))
{
this.FileToBeCopiedTextBox.Text = folderDialog.SelectedPath;
}
}
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;
}
}
private void btnCopyFolder_Click(object sender, EventArgs e)
{
Computer MyComputer = new Computer();
if(this.DestionFileTextBox.Text == "")
{
MessageBox.Show("
您並未指定複製目標數據夾。
", "
請注意
");
this.DestionFileTextBox.Focus();
this.DestionFileTextBox.SelectionStart =
this.DestionFileTextBox.Text.Length;
return;
}
try
{
MyComputer.FileSystem.CopyDirectory(
this.FileToBeCopiedTextBox.Text,
this.DestionFileTextBox.Text,
(UIOption)(System.Enum.Parse(typeof(UIOption),
showUIComboBox.SelectedItem.ToString())),
(UICancelOption)(System.Enum.Parse(typeof(UICancelOption),
onUserCancelComboBox.SelectedItem.ToString())));
//
啓動
Windows
文件總管。
Process.Start("explorer.exe",
Path.GetDirectoryName(this.DestionFileTextBox.Text));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}