Miksi minun koodini ei suostu listaamaan kansioita? apua?
***formille Option Explicit Private Sub Form_Load() If Dir("C:\Listatut", vbDirectory) = "" Then MkDir "C:\Listatut" End If End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Public Sub Command2_click() Dim Item As Variant For Each Item In GetFileList(Dir1.Path) List1.AddItem Item Next If Dir("C:\Listatut", vbDirectory) = "" Then MkDir "C:\Listatut" End If Open "C:\Listatut\Lista.txt" For Append As #1 Print #1, "Tiedostot:" Print #1, Item Close #1 End Sub
***moduuliin Option Explicit Public Function GetFileList(ByVal Folder As String) If Right$(Folder, 1) <> "\" Then Folder = Folder & "\" Dim Files As New Collection ScanFolder Folder, Files Set GetFileList = Files End Function Private Function ScanFolder(Folder As String, Files As Collection) Dim FolderItem As Variant, NewItem As String, Attr As Long For Each FolderItem In FolderItems(Folder) NewItem = Folder & FolderItem On Error Resume Next Attr = GetAttr(NewItem) If Err Then GoTo NextItem On Error GoTo 0 If Attr And vbDirectory Then ScanFolder NewItem & "\", Files Else Files.Add NewItem End If NextItem: Next End Function Private Function FolderItems(Folder As String) As Collection Dim C As New Collection, S As String S = Dir(Folder, vbDirectory Or vbHidden Or vbSystem) Do Until S = vbNullString If S <> "." And S <> ".." Then C.Add S S = Dir Loop Set FolderItems = C End Function
1. Olisi hyvä kertoa tarkkaan mikä ei toimi. Ei tyyliin: "tossa on koodi, mikä kusee?"
2. Rivi jota debuggeri mahdollisesti herjaa olisi myös hyvä kertoa.
3.Kertaa kohdat yksi ja kaksi.
Kerro kunnollisesti, mitä olet tekemässä, niin voidaan auttaa...
Tuomas: En tiedä mikä kusee... se ei vaan suostu kirjottamaan tuohon "listatut.txt" tiedostoon muuta kuin tuon "Tiedostot:" vaikka sen pitäisi kirjoittaa mitä kansio sisältää. dir1.pathilla pitäisi valita kansio josta se listaa tiedostot. Esim Jos dir1 on kansio E:\Tämä niin sen pitäisi listata sen kansion sisältö.
Debugger ei herjaa mitään...
EDIT: Antti Laaksonen: Olen tekemässä ohjelmaa joka listaa kansiot ja ali kansiot sen on tarkoitus kirjoittaa tiedostot mitä kansio(t) sisältää teksti tiedostoon joka tallentuu "C:\Listatut\Lista.txt"
Mutta se ei suostu kirjoittamaan tonne teksti tiedostoon mitään muuta kuin tuon "Tiedostot:"... Apuja?
Sain toimimaan kun laitoin tuon tekstitiedostoon kirjoituksen tuonne
Dim Item As Variant For Each Item In GetFileList(Dir1.Path) List1.AddItem Item Next
väliin
Olen vieläkin pikkuisen viimeistelemässä tätä tiedoston listaus ohjelmaa mutta sain kaiken tehtyä mutta törmäsin ongelmaa kun yritin listata musiikkiani. Ohjelma ei suostu listaamaan kovalevyn sisältöä vain kansion sisällön. Siis kun valitsen Drivelistboxista kovalevyn ja pidän dirlistboxissa sen juuri kansiossa (D:\) niin se sanoo että
"Run time error '52':
Bad file name or number"
Ongelma on moduulilla
***Moduuli Option Explicit Public Function GetFileList(ByVal Folder As String) If Right$(Folder, 1) <> "\" Then Folder = Folder & "\" Dim Files As New Collection ScanFolder Folder, Files Set GetFileList = Files End Function Private Function ScanFolder(Folder As String, Files As Collection) Dim FolderItem As Variant, NewItem As String, Attr As Long For Each FolderItem In FolderItems(Folder) NewItem = Folder & FolderItem On Error Resume Next Attr = GetAttr(NewItem) If Err Then GoTo NextItem On Error GoTo 0 If Attr And vbDirectory Then ScanFolder NewItem & "\", Files Else Files.Add NewItem End If NextItem: Next End Function Private Function FolderItems(Folder As String) As Collection Dim C As New Collection, S As String S = Dir(Folder, vbArchive Or vbDirectory Or vbHidden Or vbSystem) 'virhe on tällä rivillä Do Until S = vbNullString If S <> "." And S <> ".." Then C.Add S S = Dir Loop Set FolderItems = C End Function
Minulla koodi toimi moitteettomasti sekä kiintolevyllä (C:\) että levykkeellä (A:\). Kun yritin lukea tyhjää CD-asemaa (D:\), tuli sen sijaan sama virheilmoitus kuin sinulla. Koodissa on otettu huomioon hakemistolistassa oleva bugi (juurihakemistossa on kenoviiva, mutta alihakemistoissa ei), joten sen suhteen ei pitäisi olla ongelmia. Tarkista Folder-muuttujan arvo virheen aiheuttavalla rivillä!
Aihe on jo aika vanha, joten et voi enää vastata siihen.