十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
用API函數(shù) SHFileOperation的方法。
成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、網(wǎng)站建設(shè)與策劃設(shè)計(jì),東港網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:東港等地區(qū)。東港做網(wǎng)站價(jià)格咨詢:18980820575
以下是使用SHFileOperation刪除復(fù)制移動(dòng)文件的例子,可以復(fù)制文件夾
Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Long
hNameMappings As Long
lpszProgressTitle As String '只有在 FOF_SIMPLEPROGRESS 時(shí)用
End Type
Private Declare Function SHFileOperation Lib _
"shell32.dll" Alias "SHFileOperationA" (lpFileOp _
As SHFILEOPSTRUCT) As Long
'wFunc 常數(shù)
'FO_COPY 把 pFrom 文件拷貝到 pTo。
Const FO_COPY = H2
'FO_DELETE 刪除 pFrom 中的文件(pTo 忽略)。
Const FO_DELETE = H3
'FO_MOVE 把 pFrom 文件移動(dòng)到 pTo。
Const FO_MOVE = H1
'fFlag 常數(shù)
'FOF_ALLOWUNDO 允許 Undo 。
Const FOF_ALLOWUNDO = H40
'FOF_NOCONFIRMATION 不顯示系統(tǒng)確認(rèn)對(duì)話框。
Const FOF_NOCONFIRMATION = H10
'FOF_NOCONFIRMMKDIR 不提示是否新建目錄。
Const FOF_NOCONFIRMMKDIR = H200
'FOF_SILENT 不顯示進(jìn)度對(duì)話框
Const FOF_SILENT = H4
Private Sub Command1_Click()
'例子:
Dim SHFileOp As SHFILEOPSTRUCT
' 拷貝
SHFileOp.wFunc = FO_COPY
SHFileOp.pFrom = "d:\MASM611"
SHFileOp.pTo = "c:\MASM611"
SHFileOp.fFlags = FOF_NOCONFIRMMKDIR
Call SHFileOperation(SHFileOp)
End Sub
或者用命令行
shell "cmd.exe /c xcopy "+chr(34)+"C:\新建文件夾 c:\aa /q /e" +chr(34)
用 io.Directory.Exists 判斷文件夾是否存在。
再用 My.Computer.FileSystem.CopyDirectory() 復(fù)制。
這段代碼的問題是:
首先for each循環(huán)在files里查找文件對(duì)象,但是f變量聲明為string了,無法讓它獲取對(duì)象;
然后file.copy的變量file沒有任何聲明,也沒有初始化賦值等;
最后,整個(gè)for each循環(huán)里查找集合files的文件,由于初始化的循環(huán)計(jì)數(shù)器仍然按照最初設(shè)定的文件數(shù)目向后遞增(文件地址),但是實(shí)際文件刪除一部分,后續(xù)的文件位置就不能跟循環(huán)計(jì)數(shù)指針匹配了,所以默認(rèn)為查找不到文件,將會(huì)報(bào)錯(cuò)。一般的做法時(shí)把復(fù)制和刪除分別放在2次循環(huán)里,第一次只復(fù)制文件,第二次才去刪除。