vb.net 文件夹实现移动 并显示进度条,richtextbox1显示移动的文件名
2011-01-28 00:06
387 查看
利用线程,和计时器,Function GetFolderSize从网上借鉴的,IO类只支持不同分区移动,所以移动目录只能在相同分区,设计界面如图,
如: d:/a d:/b(空目录)
代码如下
Imports System.IO
Imports System.Threading
Public Class Form2
Dim SourceDir, DestDir As String
Dim SourceLen As Integer
'返回文件夹大小
Private Function GetFolderSize(ByVal DirPath As String, Optional ByVal IncludeSubFolders As Boolean = True) As Long
Dim lngDirSize As Long
Dim objFileInfo As FileInfo
Dim objDir As DirectoryInfo = New DirectoryInfo(DirPath)
Dim objSubFolder As DirectoryInfo
Try
For Each objFileInfo In objDir.GetFiles()
lngDirSize += objFileInfo.Length
Next
If IncludeSubFolders Then
For Each objSubFolder In objDir.GetDirectories()
lngDirSize += GetFolderSize(objSubFolder.FullName)
Next
End If
Catch
End Try
Return lngDirSize
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New Thread(AddressOf DirMove)
CheckForIllegalCrossThreadCalls = False
SourceDir = TextBox1.Text
DestDir = TextBox2.Text
SourceLen = GetFolderSize(SourceDir)
ProgressBar1.Value = 0
Timer1.Interval = 100
Timer1.Start()
T.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Directory.Exists(DestDir) = False Then Exit Sub
If SourceLen <> 0 Then
ProgressBar1.Value = Math.Round(GetFolderSize(DestDir) / SourceLen, 2) * 100
End If
End Sub
Private Sub DirMove()
Me.Text = "正在移动..."
Directory.Move(SourceDir, DestDir)
Me.Text = "移动完成!"
ProgressBar1.Value = 100
RichTextBox1.Text += DestDir & Environment.NewLine
End Sub
Private Sub DirCopy()
My.Computer.FileSystem.CopyDirectory(SourceDir, DestDir, True, FileIO.UICancelOption.DoNothing)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim T As New Thread(AddressOf DirCopy)
CheckForIllegalCrossThreadCalls = False
SourceDir = TextBox1.Text
DestDir = TextBox2.Text
SourceLen = GetFolderSize(SourceDir)
ProgressBar1.Value = 0
Timer1.Interval = 100
Timer1.Start()
T.Start()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim a As New ArrayList
a.Add(".MP3")
Dim b As New ArrayList
Dim c As New Hashtable
clsUtil.findDirectory("D:/a", a, b, c)
End Sub
End Class
如: d:/a d:/b(空目录)
代码如下
Imports System.IO
Imports System.Threading
Public Class Form2
Dim SourceDir, DestDir As String
Dim SourceLen As Integer
'返回文件夹大小
Private Function GetFolderSize(ByVal DirPath As String, Optional ByVal IncludeSubFolders As Boolean = True) As Long
Dim lngDirSize As Long
Dim objFileInfo As FileInfo
Dim objDir As DirectoryInfo = New DirectoryInfo(DirPath)
Dim objSubFolder As DirectoryInfo
Try
For Each objFileInfo In objDir.GetFiles()
lngDirSize += objFileInfo.Length
Next
If IncludeSubFolders Then
For Each objSubFolder In objDir.GetDirectories()
lngDirSize += GetFolderSize(objSubFolder.FullName)
Next
End If
Catch
End Try
Return lngDirSize
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim T As New Thread(AddressOf DirMove)
CheckForIllegalCrossThreadCalls = False
SourceDir = TextBox1.Text
DestDir = TextBox2.Text
SourceLen = GetFolderSize(SourceDir)
ProgressBar1.Value = 0
Timer1.Interval = 100
Timer1.Start()
T.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Directory.Exists(DestDir) = False Then Exit Sub
If SourceLen <> 0 Then
ProgressBar1.Value = Math.Round(GetFolderSize(DestDir) / SourceLen, 2) * 100
End If
End Sub
Private Sub DirMove()
Me.Text = "正在移动..."
Directory.Move(SourceDir, DestDir)
Me.Text = "移动完成!"
ProgressBar1.Value = 100
RichTextBox1.Text += DestDir & Environment.NewLine
End Sub
Private Sub DirCopy()
My.Computer.FileSystem.CopyDirectory(SourceDir, DestDir, True, FileIO.UICancelOption.DoNothing)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim T As New Thread(AddressOf DirCopy)
CheckForIllegalCrossThreadCalls = False
SourceDir = TextBox1.Text
DestDir = TextBox2.Text
SourceLen = GetFolderSize(SourceDir)
ProgressBar1.Value = 0
Timer1.Interval = 100
Timer1.Start()
T.Start()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim a As New ArrayList
a.Add(".MP3")
Dim b As New ArrayList
Dim c As New Hashtable
clsUtil.findDirectory("D:/a", a, b, c)
End Sub
End Class
相关文章推荐
- 在水晶报表中实现任意选择指定字段显示 (vb.net vs2003)
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)
- vb.net里 对文件夹进行添加,复制,移动,删除 源码实例
- VB.NET Datagridview 增加列用来显示进度条
- vb.net使用TreeView 控件显示文件夹列表
- VB.NET中用API实现打开文件夹
- vb.net实现Datagridview控件显示数据库中的图片
- 在ASP.NET中实现鼠标移动悬停在DataGrid时高亮显示这一行的方法
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)
- ASP.NET-C# listview控件显示文件夹内的文件名及路径
- [转] 在水晶报表中实现任意选择指定字段显示 (vb.net vs2003) [来自--http://blog.csdn.net/rainbowsoftware/]
- VB.NET实现ReportViewer 显示参数化查询结果
- asp.net 实现进度条 用来显示加载进度或程序处理进度
- ExtJS+ASP.NET实现真实的进度条显示服务器端长时间操作的进度
- vb.net做的无窗口应用程序如何实现移动
- ExtJS+ASP.NET实现真实的进度条显示服务器端长时间操作的进度
- VB.NET实现 TreeView控件查找节点,显示节点
- [VB.NET]新手请教:根据DATAGRID实现进度图表,请高手帮忙!
- 重写System.IO.MemoryStream类, 实现LumiSoft.Net.POP3.Client单封邮件的下载进度显示
- 一个文件夹拷贝的实现(VB.net)