Olen tekemässä ohjelmaa joka listaa tiedoston hallinnan tiedostot erilliselle Lista.txt tiedostolle. Mutta tarvitsisin hiukan apua koodin kanssa kun minun ohjelmani ei suostu kirjoittamaan kun yhden tiedoston kansiosta siihen Lista.txt tiedostoon ja kun uudelleen tekee niin se pyyhkii vanhan pois.
Koodi:
Private Sub Form_Load() MkDir "C:\Listatut" End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Command3_Click() tied$ = Dir$("File1 *-*") Do While tied$ <> "" Print tied$; "C:\Listatut\Lista.txt" tied$ = Dir$ Loop End Sub Private Sub Command2_Click() Open "C:\Listatut\Lista.txt" For Output As #1 Write #1, "Tiedosto:" Write #1, File1 Close #1 End Sub
Avaa tiedosto Outputin sijaan Append-moodissa.
Se ei siltikään listannut kuin yhden tiedoston nimen sille tekstitiedostolle.
Koitas:
Open "C:\Listatut\Lista.txt" For Append As #1 Print #1, "Tiedosto:" Print #1, File1 Close #1
En kyllä ole varma auttaako tuo mitään, mutta Writeä en ole koskaan käyttänyt, ja Print on ainakin itselläni aina toiminut. Oletko varma, että tuo koodi edes ajetaan useamman kerran? Siis, että tuo nimi on varmasti kuuluu olla Command2_Click tms.
en ole varma että ajetaanko sitä useampia kertoja. tämä on ensimmäinen sellainen "isompi" projektini ja ihan kokonaan oma toteuttamani. mutta siinä on drivelistbox, dirlistbox ja filelistbox ja kolme command buttonia ja kun painaa command2 buttonia niin sen pitäisi listata dirlistboxin tiedostot erilliseen tekstitiedostoon.
Tarkoitat kai FileListboxin, etkä DirListboxin? Ainakin koodissasi on "Write #1, File1" eikä "Write #1, Dir1". Mutta jos teet sen vain noin, niin se tulostaa vain sen kodan, mikä listassa on valittuna. Pitäisi tehdä silmukka joka tallentaa vuorotellen jokaisen kohdan listasta. Esim
For i = 0 To File1.ListCount 'silmukka nollasta rivien määrään Print #1, File1.List(i) 'tallennetaan kohta i Next i
Kokeiles toimiiko noin.
Kiitos Hunajavohvelille. Kun tuolla minun koodissa on Tuo
Private Sub Form_Load()
MkDir "C:\Listatut"
End Sub
Nii saisiko siihen mitenkään sellaista koodia joka tarkistaisi että onko kansio jo olemassa ja jos on niin että ei tekisi sitä uudellee jos tekee sen uudelleen niin se valittaa että
Run-time error '75':
Path/File access error
If Dir("C:\Listatut") = "" Then MkDir "C:\Listatut" End if
Tuon pitäisi toimia...
ei toiminnut.. sanoo samaa
Run-time error '75':
Path/File access
Sen koodin pitäisi tarkistaa onko C:llä sellainen kansio kuin Listatut ja jos on nii ei tekisi sitä ja jos ei ole nii tekisi sellaisen kansion sinne.
Vilkaisepa tämän keskustelun viimeinen viesti.
Kiitos antti tuo auttoi siihen tarkistamiseen mutta miten saisin sen vielä tekemään sen kansion jos sitä ei ole olemassa.
No se onnistuu juuri tuolla MkDir-komennolla. Muuta vain jrantalan koodia niin, että parametri vbDirectory on mukana.
Kiitos antti.
Muokkailin koodiani pikkuisen ja törmäsin ongelmaan mitä en onnistunnut ratkaisemaan
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 Private Sub command2_click() Open "C:\Listatut\Lista.txt" For Append As #1 Print #1, "Kansio mistä listattiin:" Print #1, Dir1.Path Print #1, "Tiedostot:" For i = 0 To File1.ListCount Print #1, File1.List(i) Next i lista$ = Dir1.Path List1.AddItem lista$ End Sub Private Sub Command1_Click() Form2.Show End Sub
Ongelma on sellainen että tuolla koodilla ei voi listata kuin kerran ja sitten joutuu käynnistämään ohjelman uudelleen että voi listata jonkun muun kansion. Missä ongelma on nii se on tuo "Open "C:\Listatut\Lista.txt" For Append As #1" käsky koska se sanoo jo että tiedosto on jo auki. onko ratkaisuja miten voisin listata loputtomia kertoja yhdellä ohjelman avauksella?
Tottakai se tiedosto on auki, kun et sulje sitä missään välissä.
Close #1
oho :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.