|
WWW.DBIT.CN 2006-9-5 0:42:42 热度: |
|
|
Console.WriteLine("DirCopy ""C:\My Folder"" ""C:\My New Folder""") Console.ForegroundColor = originalForegroundColor End Sub
该子程序做的第一事情是创建一个变量originalForegroundColor,然后它存储Console.ForegroundColor的值。在子程序的最后,代码把Console.ForegroundColor属性设置回originalForegroundColor。当你分析这部分代码时,你会注意到,在每个修改前景或背景颜色的子程序中都是这样操作的。在实际运行DirCopy之前,我想确保DirCopy总是让控制台显示相同的颜色。
DisplayUsage做的下一件事情是,使用Console.Clear方法清除控制台屏幕。这是在VB2005中的新方法之一;这样以来,程序员可以很容易地拥有一个干净的控制台窗口。
我想让帮助文本显眼一点,为此,我把ForegroundColor属性设置为绿色。然后,我使用Writeline和Write方法把几行文本输出到屏幕上。在描述的最后,我包括了一些怎样运行DirCopy的示例。我想使得这些示例突出一些;因此,我把ForegroundColor设置为品红色。
四、 引擎—CopyFiles
这个CopyFiles子程序负责完成这个应用程序中的绝大多数工作。它负责取得源目录下的一个文件列表,然后把它们复制到目的目录下。另外,它还创建了一个ConsoleProgressBar对象来管理进度条:
Private Sub CopyFiles(ByVal srcDir As String, ByVal destDir As String) Const BufferSourceTopLine As Integer = 8 Const BufferDestinationTopLine As Integer = 7 Dim rowIndex As Integer = 7 Dim originalForegroundColor As ConsoleColor = Console.ForegroundColor Console.CursorVisible = False Console.Clear() Dim numberOfFiles As Integer numberOfFiles = My.Computer.FileSystem.GetFiles(srcDir).Count Dim PB As New ConsoleProgressBar(numberOfFiles) DisplayHeader(srcDir, destDir) Dim fileCounter As Integer = 1 For Each f As String In My.Computer.FileSystem.GetFiles(srcDir) Dim fi As New System.IO.FileInfo(f) Console.ForegroundColor = ConsoleColor.Green Console.SetCursorPosition(0, rowIndex) Console.Write(fi.Name) If rowIndex < Console.WindowHeight - 1 Then rowIndex += 1 Else Console.MoveBufferArea(0,BufferSourceTopLine, _ Console.WindowWidth, _ Console.WindowHeight - _ BufferSourceTopLine, _ 0, _ BufferDestinationTopLine) End If My.Computer.FileSystem.CopyFile(fi.FullName, destDir &"\" & fi.Name) pb.Update( fileCounter) fileCounter += 1 Next Console.ForegroundColor = originalForegroundColor Console.SetCursorPosition(0, Console.WindowHeight - 1) Console.CursorVisible = True End Sub
首先,该代码保存当前的ForegroundColor。然后,它使用另外一种新特征把CursorVisible属性设置为False。在清除控制台窗口后,它检索在源目录下的文件个数并且使用这个数字作为ConsoleProgressBar构造器的最大值。稍后,我还要讨论有关于 ConsoleProgressBar的细节信息。
我调用DisplayHeader子程序来把一些有关复制操作的信息打印到控制台窗口。由于其功能非常类似于DisplayUsage子程序,所以我在此省略对其细节的讨论。
我使用了一个“For...Each”循环来遍历在源目录下的所有文件,并使用了一个rowIndex变量来跟踪要把文件名打印到控制台的哪一行。随着循环的不断执行,rowIndex每次增加1,直到到达控制台窗口的底部为止。一旦到达控制台窗口的底部,我利用另外一个新控制台应用程序特征— MoveBufferArea方法(下一节讨论)。 |
|
|
|
|
|
|
|
|
|