vb點虐 編程查找搜索指定目錄下面的所有文件和其子目錄下的文件,方法如下:
10年積累的成都網站建設、成都網站制作經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有川匯免費網站建設讓你可以放心的選擇與我們合作。
''=============================================
''名稱:?FindPath
''作用:?查找搜索指定目錄下面的所有文件和其子目錄下的文件
''參數:strPath?要查找的目錄,
''strFiles?用于存查找結果的緩沖區,String?類型的動態數組,調用時事先初始化,?如Redim?strFiles(0)
''FileCount?用于返回文件個數
''=============================================
Public?Sub?FindPath(ByVal?strPath?As?String,?strFiles()?As?String,?FileCount?As?Long)
Dim?strDirs()???As?String
Dim?strResult???As?String
Dim?FileLimit???As?Long
Dim?dirLimit????As?Long
Dim?dirCount????As?Long
Dim?I???????????As?Long
FileLimit?=?UBound(strFiles)?+?1
dirLimit?=?0
If?Right$(strPath,?1)??"/"?Then?strPath?=?strPath??"/"
strResult?=?Dir(strPath,?vbDirectory?+?vbSystem?+?vbReadOnly?+?vbHidden?+?vbNormal?+?vbArchive)
Do?While?Len(strResult)??0
If?strResult??"."?And?strResult??".."?Then
If?(GetAttr(strPath??strResult)?And?vbDirectory)??vbDirectory?Then
If?FileCount?=?FileLimit?Then
ReDim?Preserve?strFiles(FileLimit?+?10)
FileLimit?=?FileLimit?+?10
End?If
strFiles(FileCount)?=?strPath??strResult
FileCount?=?FileCount?+?1
Else
If?dirCount?=?dirLimit?Then
ReDim?Preserve?strDirs(dirLimit?+?10)
dirLimit?=?dirLimit?+?10
End?If
strDirs(dirCount)?=?strPath??strResult
dirCount?=?dirCount?+?1
End?If
End?If
strResult?=?Dir(,?vbDirectory?+?vbSystem?+?vbReadOnly?+?vbHidden?+?vbNormal?+?vbArchive)
Loop
For?I?=?0?To?dirCount?-?1
Call?FindPath(strDirs(I),?strFiles,?FileCount)
Next?I
End?Sub
這段代碼的問題是:
首先for each循環在files里查找文件對象,但是f變量聲明為string了,無法讓它獲取對象;
然后file.copy的變量file沒有任何聲明,也沒有初始化賦值等;
最后,整個for each循環里查找集合files的文件,由于初始化的循環計數器仍然按照最初設定的文件數目向后遞增(文件地址),但是實際文件刪除一部分,后續的文件位置就不能跟循環計數指針匹配了,所以默認為查找不到文件,將會報錯。一般的做法時把復制和刪除分別放在2次循環里,第一次只復制文件,第二次才去刪除。
先用System.IO.Directory.GetDirectories函數獲取子目錄的名稱(包括其路徑),再用System.IO.Path.GetFileName獲取子目錄的名稱。下面是代碼:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
For Each s In System.IO.Directory.GetDirectories("C:\Windows")
Console.WriteLine(System.IO.Path.GetFileName(s))
Next
End Sub
下面是部分輸出:
Application Data
AppPatch
assembly
BOCNET
Boot
Branding
ConfigSetRoot
Cursors
Debug
DigitalLocker
Downloaded Installations
Downloaded Program Files
ehome
en-US
Fonts
Globalization
Help
...
可能有更簡潔的方法,你可以到MSDN看看
System.IO.Directory.GetDirectories:
System.IO.Path.GetFileName:
通用 I/O 任務:
首先我們得判斷文件/目錄是否存在然后獲取文件信息(創建時間)。有文件的獲取時間了,就可以知道這個文件的創建時間,就能判斷目錄的文件是什么時候增加的,那么離自己最近的時間創建的的文件就是目錄的增加文件了。
判斷文件/目錄是否存在
Try ? ? ? ? ? ?' 先判斷文件是否存在。 ? ? ? ? ? ?If Not File.Exists(TextBox4.Text) Then
File.CreateText(TextBox4.Text) '單純創建文件一般不常用,正常情況下是創建文件然后進行讀寫操作
'System.IO.File.Create(TextBox4.Text) ? ? ? ? ? ?End If
Catch ex As Exception
MessageBox.Show(ex.Message)
Exit Sub
End Try
獲取文件信息(創建時間)?FileDateTime(fii(i).FullName)? ? ?File.GetCreationTime(path)
System.IO.File.Create(Path)'創建文件
System.IO.File.CreateText(Path)'創建文件
System.IO.File.Copy(Path,targetPath) ? ? ?'復制到新位置,不允許覆蓋現有文件 ? ? ? ?也可以'FileCopy(TextBox4.Text, "C:" "\" file_name(UBound(file_name))) System.IO.File.Move(SourceFileName, DestFileName)
System.IO.File.Delete(Path)
'追加 System.IO.File.AppendText'替換
System.IO.File.Replace
當前標題:vb點虐
目錄文件 vba 文件目錄
轉載注明:http://vcdvsql.cn/article44/ddipohe.html
成都網站建設公司_創新互聯,為您提供做網站、關鍵詞優化、外貿建站、網站制作、品牌網站制作、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯