Re: [.NET] 請問一個小程式的問題(copy file)...

看板Visual_Basic作者 (侰侰侁)時間19年前 (2006/03/28 19:55), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
可以用VB的一個控制項 Microsoft Internet Transfer Control 不過可能要注冊一把﹐有可能 引用了之後即可使用 其使用方法一般為 采用vb.net的internet傳輸控件 在窗口中添加控件﹐聲明為axlnet1 初始化傳輸控件 With AxInet1 .URL = "ftp://192.168.3.38" .UserName = "WYX" .Password = "WYX" .Protocol = InetCtlsObjects.ProtocolConstants.icFTP .RequestTimeout = 120 利用初始化了的控件進行文件操作 '刪除文件 Public Function delFtpFile(ByVal ftpPath As String, ByVal ftpFileNameArray() As String) As Boolean '判斷ftpPath和ftpFileNameArray() 都不能為空,如果為空false If (ftpPath = Nothing) Then Return False ElseIf ftpPath.Trim.Equals("") Then Return False End If If (ftpFileNameArray Is Nothing) Then Return False ElseIf ftpFileNameArray.Length = 0 Then Return False End If '執行刪除操作 Dim iNum As Integer Dim i As Integer Dim strExe As String iNum = ftpFileNameArray.Length For i = 0 To iNum - 1 If ftpFileNameArray(i) = Nothing Then i = i + 1 End If If i > iNum - 1 Then Exit For End If strExe = "delete " + ftpPath.Trim + "\" + ftpFileNameArray(i) Try Me.AxInet1.Execute(, strExe) Catch ex As Exception Throw ex ''如果一個文件刪除失敗,重新進行刪除操作 'If (MsgBox(ex.Message + "char(13)刪除文件" + ftpFileNameArray(i) + "失敗,是否重試?", MsgBoxStyle.OKCancel) = MsgBoxResult.OK) Then ' Dim j As Integer ' Dim bret As Boolean ' Dim icount As Integer = 0 ' Dim myStrArr(iNum - 1 - i) As String ' For j = i To iNum - 1 ' myStrArr(icount) = ftpFileNameArray(j) ' Next ' bret = delFtpFile(ftpPath, myStrArr) ' Return bret 'Else ' Return False 'End If End Try '等待ftp控制項完成刪除操作然後再返回true stillExecutingStatus() Next Return True End Function '下載文件 Public Function getFtpFile(ByVal ftpPath As String, ByVal localPath As String, ByVal ftpFileNameArray() As String) As Boolean '判斷ftpPath、localPath和ftpFileNameArray()是否為空﹐如果為空返回false If (ftpPath = Nothing) Then Return False ElseIf ftpPath.Trim.Equals("") Then Return False End If If (localPath = Nothing) Then Return False ElseIf localPath.Trim.Equals("") Then Return False End If If (ftpFileNameArray Is Nothing) Then Return False ElseIf ftpFileNameArray.Length = 0 Then Return False End If '執行下載操作 Dim iNum As Integer Dim i As Integer Dim strExe As String iNum = ftpFileNameArray.Length For i = 0 To iNum - 1 If ftpFileNameArray(i) = Nothing Then i = i + 1 End If If i > iNum - 1 Then Exit For End If strExe = "get " + ftpPath.Trim + "\" + ftpFileNameArray(i) + " " + localPath + "\" + ftpFileNameArray(i) Try Me.AxInet1.Execute(, strExe) Catch ex As Exception '如果下載失敗刪除本地已下載的文件 Dim localfilename(i) As String Dim j As Integer For j = 0 To i - 1 localfilename(j) = ftpFileNameArray(j) Next Me.delLocalDir(localPath, localfilename) Throw ex '如果一個文件下載失敗,從失敗的文件處重新進行下載操作 'If (MsgBox(ex.Message + "char(13)下載文件" + ftpFileNameArray(i) + "失敗,是否重試?", MsgBoxStyle.OKCancel) = MsgBoxResult.OK) Then ' Dim j As Integer ' Dim bret As Boolean ' Dim icount As Integer = 0 ' Dim myStrArr(iNum - 1 - i) As String ' For j = i To iNum - 1 ' myStrArr(icount) = ftpFileNameArray(j) ' Next ' bret = getFtpFile(ftpPath, localPath, myStrArr) ' Return bret 'Else ' Return False 'End If End Try '等待ftp控件完成刪除操作然後再返回true stillExecutingStatus() Next Return True End Function '上傳文件 Public Function putFtpFile(ByVal ftpPath As String, ByVal localPath As String, ByVal ftpFileNameArray() As String, ByVal localFileNameArray() As String) As Boolean '判斷ftpPath、localPath和ftpFileNameArray()是否為空﹐如果為空返回false If (ftpPath = Nothing) Then Return False ElseIf ftpPath.Trim.Equals("") Then Return False End If If (localPath = Nothing) Then Return False ElseIf localPath.Trim.Equals("") Then Return False End If If (ftpFileNameArray Is Nothing) Then Return False ElseIf ftpFileNameArray.Length = 0 Then Return False End If If (localFileNameArray Is Nothing) Then Return False ElseIf localFileNameArray.Length = 0 Then Return False End If '執行上傳操作 Dim iNum As Integer Dim i As Integer Dim strExe As String iNum = ftpFileNameArray.Length For i = 0 To iNum - 1 If ftpFileNameArray(i) = Nothing Then i = i + 1 End If If i > iNum - 1 Then Exit For End If strExe = "put " + localPath.Trim + "\" + localFileNameArray(i) + " " + ftpPath + "\" + ftpFileNameArray(i) Try Me.AxInet1.Execute(, strExe) Catch ex As Exception Throw ex ''如果一個文件下載失敗,從失敗的文件處重新進行上傳操作 'If (MsgBox(ex.Message + "char(13)上傳文件" + ftpFileNameArray(i) + "失敗,是否重試?", MsgBoxStyle.OKCancel) = MsgBoxResult.OK) Then ' Dim j As Integer ' Dim bret As Boolean ' Dim icount As Integer = 0 ' Dim myStrArrftp(iNum - 1 - i) As String ' Dim myStrArrlocal(iNum - 1 - i) As String ' For j = i To iNum - 1 ' myStrArrftp(icount) = ftpFileNameArray(j) ' myStrArrlocal(icount) = localFileNameArray(j) ' Next ' bret = putFtpFile(ftpPath, localPath, myStrArrftp, myStrArrlocal) ' Return bret 'Else ' Return False 'End If End Try Dim icnt As Integer = 0 '等待ftp控制項完成刪除操作然後再返回true stillExecutingStatus() Next Return True End Function '刪除ftp目錄 Public Function delFtpDir(ByVal ftpPath As String, ByVal ftpFileNameArray() As String) As Boolean '先刪除目錄裡面的文件﹐然後再刪除目錄 If Me.delFtpFile(ftpPath, ftpFileNameArray) = True Then Me.AxInet1.Execute(, "rmdir " + ftpPath) '等待ftp控件完成刪除操作然後再返回true stillExecutingStatus() Return True Else '如果檔案夾裡面沒有文件刪除檔案夾 If ftpPath = Nothing Then Return False ElseIf ftpPath.Trim.Equals("") Then Return False Else Me.AxInet1.Execute(, "rmdir " + ftpPath) '等待ftp控件完成刪除操作然後再返回true stillExecutingStatus() Return True End If End If End Function '創建ftp目錄﹐並上傳文件﹐可以進行覆蓋操作 Public Function crtFtpDir(ByVal ftpPath As String, ByVal localPath As String, ByVal ftpFileNameArray() As String, ByVal localFileNameArray() As String) As Boolean '創建目錄 Me.AxInet1.Execute(, "mkdir " + ftpPath) '等待ftp控件完成刪除操作然後再返回true stillExecutingStatus() Return Me.putFtpFile(ftpPath, localPath, ftpFileNameArray, localFileNameArray) '上傳文件 End Function 'ftp上文件改名(單個文件) ''???有必要批量修改文件嗎﹖ Public Function renameFtpFile(ByVal ftpPath As String, ByVal OriginalFtpFilename As String, ByVal newFtpFilename As String) As Boolean '1下載文件到本地目錄﹐2 上傳文件(更改名稱) 3 刪除本地文件 4 刪除ftp文件 Try '下載文件到本地 Dim localPath As String localPath = "c:\tempwjbphotosoftware" '創建本地臨時目錄 System.IO.Directory.CreateDirectory(localPath) Me.AxInet1.Execute(, "get " + ftpPath + "\" + OriginalFtpFilename + localPath + "\" + OriginalFtpFilename) '等待ftp控件完成刪除操作然後再返回true stillExecutingStatus() '上傳文件 Me.AxInet1.Execute(, "put " + localPath + "\" + OriginalFtpFilename + " " + ftpPath + "\" + newFtpFilename) stillExecutingStatus() '刪除ftp原文件 Me.AxInet1.Execute(, " delete " + ftpPath + "\" + OriginalFtpFilename) stillExecutingStatus() '刪除本地文件 System.IO.Directory.Delete(localPath) Return True Catch ex As Exception 'Return False Throw ex End Try End Function '移動單個文件,前提目標文件夾已經存在 Public Function moveFtpFile(ByVal originalFtpPath As String, ByVal newFtpPath As String, ByVal OriginalFtpFilename As String, ByVal newFtpFilename As String) As Boolean ''1下載文件到本地目錄﹐2 上傳文件(更改名稱) 3 刪除本地文件 4 刪除ftp文件 Try '下載文件到本地 Dim localPath As String localPath = "c:\tempwjbphotosoftware" '創建本地臨時目錄 System.IO.Directory.CreateDirectory(localPath) Me.AxInet1.Execute(, "get " + originalFtpPath + "\" + OriginalFtpFilename + localPath + "\" + OriginalFtpFilename) '等待ftp控件完成刪除操作然後再返回true stillExecutingStatus() Me.AxInet1.Execute(, "mkdir " + newFtpPath) stillExecutingStatus() '上傳文件 Me.AxInet1.Execute(, "put " + localPath + "\" + OriginalFtpFilename + " " + newFtpPath + "\" + newFtpFilename) stillExecutingStatus() '刪除ftp原文件 Me.AxInet1.Execute(, " delete " + originalFtpPath + "\" + OriginalFtpFilename) stillExecutingStatus() '刪除本地文件 Dim localfilename() As String = New String(0) {OriginalFtpFilename} Me.delLocalDir(localPath, localfilename) Return True Catch ex As Exception Throw ex 'Return False End Try End Function ' 移動整個檔案夾﹐做法﹕把文件都下載到本地﹐在ftp上創建文件夾﹐上傳﹐然後再刪掉原來的檔案夾 Public Function moveFtpDir(ByVal originalFtpPath As String, ByVal newFtpPath As String) As Boolean '判斷originalftppath是否為空 If originalFtpPath = Nothing Then Return False ElseIf originalFtpPath.Trim.Equals("") Then Return False End If '判斷newFtpPath是否為空 If newFtpPath = Nothing Then Return False ElseIf newFtpPath.Trim.Equals("") Then Return False End If Me.AxInet1.Execute(, "rename " + originalFtpPath + " " + newFtpPath) stillExecutingStatus() Return True End Function '刪除本地檔案夾 Public Sub delLocalDir(ByVal localPath As String, ByVal localfilename() As String) Try If localfilename Is Nothing Then '刪除空檔案夾 System.IO.Directory.Delete(localPath) ElseIf localfilename.Length = 0 Then '刪除空檔案夾 System.IO.Directory.Delete(localPath) Else '清空檔案夾 Dim i As Integer For i = 0 To localfilename.Length - 1 System.IO.File.Delete(localPath + "\" + localfilename(i)) Next '刪除檔案夾 System.IO.Directory.Delete(localPath) End If Catch ex As Exception Throw ex End Try End Sub '等待stillexecuting狀態為false Public Sub stillExecutingStatus() While (Me.AxInet1.StillExecuting) System.Windows.Forms.Application.DoEvents() End While End Sub ※ 引述《kelune (kelune)》之銘言: : ※ 引述《kelune (kelune)》之銘言: : : 請問一下.... : : 在dos下 copy c:\abc.txt d:\ 這個指令在vb裡要如何表示!? : : ps. 在win32應用程式(form)的語法... : 感謝~~已經解決copy to disk 部分~!! : 若是要copy to FTP 之類的...能否給個方向!? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 130.88.114.91
文章代碼(AID): #14AIGKPR (Visual_Basic)
文章代碼(AID): #14AIGKPR (Visual_Basic)