100165769.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 518 行 · 第 1/2 页
HTM
518 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
30.2 移动、复制和删除文件
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165769.htm">
30.2 移动、复制和删除文件
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165769.htm'><font color='red'>30.2 移动、复制和删除文件</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165766.htm'>30.1.1 表示文件和文件夹的.NET类</a></div><div style='float:right;width:49%'>·<a href='100165767.htm'>30.1.2 Path类</a></div><div style='float:left;width:49%'>·<a href='100165768.htm'>30.1.3 示例:文件浏览器</a></div><div style='float:right;width:49%'>·<a href='100165770.htm'>30.3 读写文件</a></div><div style='float:left;width:49%'>·<a href='100165771.htm'>30.3.1 流</a></div><div style='float:right;width:49%'>·<a href='100165772.htm'>30.3.2 读写二进制文件</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style='margin-top:11.4pt;margin-right:0cm;FTEL:11.4pt;margin-left:
0cm'><a FTEL="_Toc507815208"><span lang=EN-US>30.2 </span></a><span
style='font-family:楷体_GB2312'>移动、复制和删除文件</span></h3>
<p class=MsoNormal><a FTEL=File2></a><a FTEL=methods1><span style='font-family:
宋体'>前面已经提到,移动和删除文件或文件夹可以使用</span><span lang=EN-US>FileInfo </span></a><span
style='font-family:宋体'>和</span><span lang=EN-US>DirectoryInfo</span><span
style='font-family:宋体'>类的</span><span lang=EN-US>MoveTo() </span><span
style='font-family:宋体'>和</span><span lang=EN-US> Delete()</span><span
style='font-family:宋体'>方法来完成。</span><span lang=EN-US>File</span><span
style='font-family:宋体'>和</span><span lang=EN-US>Directory</span><span
style='font-family:宋体'>类的这两个对应方法是</span><span lang=EN-US>Move() </span><span
style='font-family:宋体'>和</span> <span
lang=EN-US>Delete()</span><span style='font-family:宋体'>。</span><span
lang=EN-US>FileInfo </span><span style='font-family:宋体'>和</span><span
lang=EN-US> File</span><span style='font-family:宋体'>类也分别执行</span><span
lang=EN-US>CopyTo() </span><span style='font-family:宋体'>和</span> <span lang=EN-US>Copy()</span><span style='font-family:宋体'>方法。没有复制完整文件夹的方法,而应复制文件夹中的每个文件。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>这些方法的使用非常直观<span
style='letter-spacing:-1.0pt'>——</span></span><span style='letter-spacing:-1.0pt'>
</span><span lang=EN-US>SDK</span><span style='font-family:宋体'>文档提供了详细的解释。本节介绍在特定情况下,调用</span><span
lang=EN-US>File</span><span style='font-family:宋体'>类的静态方法</span><span
lang=EN-US>Move()</span><span style='font-family:宋体'>、</span><span lang=EN-US>Copy()</span><span
style='font-family:宋体'>和</span><span lang=EN-US>Delete()</span><span
style='font-family:宋体'>的作用。为此,把前面的</span><span lang=EN-US>FileProperties</span><span
style='font-family:宋体'>示例扩展为一个新示例</span><span
lang=EN-US>FilePropetiesAndMovement</span><span style='font-family:宋体'>。这个示例有一个额外的功能:无论什么时候显示文<span
style='letter-spacing:.1pt'>件的属性,该应用程序都会给出删除该文件的选项,或者把该文件移动和复制到其他地方的选</span>项。</span><a
FTEL=FilePropetiesAndMovement></a></p>
<p class=MsoNormal><a FTEL="_Toc507815209"><span style='font-family:宋体'>下面介绍</span><span
lang=EN-US>FilePropertiesAndMovement</span></a><span style='font-family:宋体'>示例</span><span
style='font-family:宋体'>。图</span><span lang=EN-US>30-4</span><span
style='font-family:宋体'>所示为该示例的用户界面。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>从这个屏幕图上可以看出,它的外观非常类似于</span><span
lang=EN-US>FileProperties</span><span style='font-family:宋体'>示例,但在窗口的底部添加了一个组,其中包含三个按钮和一个文本框。这些控件仅在示例显示了文件的属性时才能使用,在其他情况下,它们都是禁用的。我们还压缩了现有的控件,防止主窗体过大。在显示文件的属性时,该示例会自动把文件的完整路径名放在底部的文本框中,供用户编辑。用户可以单击底部的任何一个按钮,执行相应的操作。此时,会显示一个相应的信息框,确认该操作。在上面的示例中,如果用户单击了</span><span
lang=EN-US>Copy To</span><span style='font-family:宋体'>,则显示如图</span><span
lang=EN-US>30-5</span><span style='font-family:宋体'>所示的信息。</span></p>
<p align=center><span lang=EN-US><img width=369 height=379
src="30/image005.jpg"></span></p>
<p align=center style='FTEL:8.15pt'><span style='font-family:宋体'>图</span><span
lang=EN-US> 30-4</span></p>
<p align=center><span lang=EN-US><img width=308 height=106
src="30/image006.jpg"></span></p>
<p align=center style='FTEL:8.15pt'><span style='font-family:宋体'>图</span><span
lang=EN-US> 30-5</span></p>
<p class=MsoNormal><span style='font-family:宋体'>当用户单击了</span><span lang=EN-US>Yes</span><span
style='font-family:宋体'>按钮后,就可以开始执行某些动作。用户在窗体上执行的某些动作会使显示不正确。例如,在移动和删除文件时,显然不能在同一个地方显示该文件的内容。而且,如果改变同一个文件夹上的文件名,显示的信息也会不正确。此时,</span><span
lang=EN-US>FilePropertiesAndMovement</span><span style='font-family:宋体'>示例会重新设置其控件,在文件的操作结束后,只显示包含文件的文件夹。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>为此,需要在</span><span lang=EN-US>FileProperties</span><span
style='font-family:宋体'>示例中添加相关的控件,及其事件处理程序代码。我们添加的控件是</span><span lang=EN-US>buttonDelete</span><span
style='font-family:宋体'>、</span><span lang=EN-US>buttonCopyTo</span><span
style='font-family:宋体'>、</span><span lang=EN-US>buttonMoveTo</span><span
style='font-family:宋体'>和</span><span lang=EN-US> txtBoxNewPath</span><span
style='font-family:宋体'>。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>首先看看用户单击</span><span
lang=EN-US>Delete</span><span style='font-family:宋体'>按钮时调用的事件处理程序:</span></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>protected void OnDeleteButtonClick(object sender, EventArgs e)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
try</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
string filePath = Path.Combine(currentFolderPath, </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
textBoxFileName.Text);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
string query = "Really delete the file\n" + filePath + "?";</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
if (MessageBox.Show(query, </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
"Delete File?", MessageBoxButtons.YesNo) == DialogResult.Yes)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
File.Delete(filePath);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
DisplayFolderList(currentFolderPath);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
catch(Exception ex)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
MessageBox.Show("Unable to delete file. The following exception" </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
+ " occurred:\n" + ex.Message, "Failed");</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>}</span></p>
<p class=MsoNormal><span style='font-family:宋体'>这个方法的代码包含在一个</span><span
lang=EN-US>try</span><span style='font-family:宋体'>块中,这是因为很显然会抛出一个异常,例如在用户单击了</span><span
lang=EN-US>delete</span><span style='font-family:宋体'>按钮后,如果不允许删除该文件,或者当时有另一个进程移动了该文件,就会抛出一个异常。在</span><span
lang=EN-US>CurrentParentPath</span><span style='font-family:宋体'>字段中构造要删除文件的路径,其中包含父文件夹的路径,</span><span
lang=EN-US>textBoxFileName</span><span style='font-family:宋体'>文本框中的文本</span><span
lang=EN-US>(</span><span style='font-family:宋体'>其中包含文件名</span><span lang=EN-US>)</span><span
style='font-family:宋体'>。</span></p>
<p class=MsoNormal><span style='font-family:宋体'>移动和复制文件的方法以类似的方式构造:</span></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US>protected void OnMoveButtonClick(object sender, EventArgs e)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
try</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
string filePath = Path.Combine(currentFolderPath, </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
textBoxFileName.Text);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
string query = "Really move the file\n" + filePath + "\nto
" </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
+ textBoxNewPath.Text + "?";</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
if (MessageBox.Show(query, </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
"Move File?", MessageBoxButtons.YesNo) == DialogResult.Yes)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
File.Move(filePath, textBoxNewPath.Text);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
DisplayFolderList(currentFolderPath);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
catch(Exception ex)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
MessageBox.Show("Unable to move file. The following exception"</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
+ " occurred:\n" + ex.Message, "Failed");</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>}</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>protected
void OnCopyButtonClick(object sender, EventArgs e)</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
try</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
{</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?