Oppure

Loading
23/06/08 15:10
alpi39
Ho visionato e letto i titoli di tutte le 40 pagine del forum alla ricerca della soluzione ad una mia domanda:
Qual è l'istruzione per eliminare una cartella con tutto ciò che contiene nel suo interno?
ho provato con 'Erase"nomeCartella"' 'Kill"nomeCartella"' ma nulla di fatto.
Qualcuno può gentilmente aiutarmi?
Grazie infinite.
:k:
aaa
23/06/08 15:24
klez91
Se stai usando Vb.Net la procedura è :
IO.Directory.Delete("PercorsoCartella", True)
aaa
23/06/08 19:48
alpi39
Postato originariamente da klez91:

Se stai usando Vb.Net la procedura è :
IO.Directory.Delete("PercorsoCartella", True)

Grazie klez91 per aver risposto ala mia richiesta d'aiuto.
Sì, sto usando Visual Basic.NET 2008 Express Edition.
Ho provato ad inserire la riga d'istruzione che tu mi hai consigliato, ma il programma mi segnala un errore in fase di esequzione e l'errore è:

IOEException non È stata gestita
Il processo non può accedere al file 'C:\Agenda\Agenda.txt' perché è in uso da un altro processo.

Se hai la pazienza di seguire il testo, ti spiego cosa dovrebbe fare il mio programma.
Come avrai certamente capito dal messaggio di errore, il programma è un'Agenda Telefonica che registra i nominativi in un file di testo con il nome "Agenda.txt" che si trova all'interno di una cartella dal nome "Agenda" e, volendo, il programma richiama un Nominativo registrato nel file "Agenda.txt" e lo visualizza nelle rispetive TextBox (nome, cognome, indirizzo, ecc.).
A questo punto, una volta richiamato un Nominativo, si può verificare la necessità di modificarlo con una correzione. Allora io richiamo in memoria tutti i record del file assegnandoli ad una variabile indicizzata.
Una volta che tutti i record sono in memoria, dovrei cancellare la cartella "Agenda" con all'interno il file "Agenda.txt", creare una nuova cartella con il nome "Agenda" e salvare al suo interno un altro file sempre con il nome "Agenda.txt dove al suo interno andrei a salvare tutti i record che conservo in memoria sostituendo il record visualizzato in precedenza con il record al quale è stata fatta la modifica.
Spero che la spiegazione sia sufficientemente chiara e che tu possa aver compreso qual è il mio problema.
Ultima modifica effettuata da alpi39 23/06/08 19:54
aaa
23/06/08 20:38
klez91
Penso che per leggere il file "C:\Agenda\Agenda.txt" utilizzi la classe IO.StreamReader, quindi l'eccezione molto probabilmente è dovuta al fatto che tu non rilasci le risorse una volta caricato il file in memoria, ma rimani lo StreamReader aperto. Per farlo se ad esempio chiami StrReader l'oggetto deputato alla lettura del file, quando hai finito di leggerlo devi chiuderlo utilizzando la procedura StrReader.Close(). Per quanto riguarda l'eliminazione del file potresti cominciare ad eliminare solo il file Agenda.txt anzichè l'intera directory, facendo IO.File.Delete("PercorsoFile";), ma in realtà questo non è necessario, in quanto basta dichiarare un nuovo StreamWriter passandogli come parametro il file "C:\Agenda\Agenda.txt", il quale non fa altro che sostituire il file esistente con quello nuovo che stai per scrivere. Spero di essere stato chiaro. Ciao :k:
aaa
24/06/08 7:23
Il Totem
Klez91 ha perfettamente ragione. E' inutile eliminare tutto quando puoi sovrascrivere, come ti avevo suggerito nell'altro topic:
Il Totem ha scritto:
"... quindi preleva la (PosizioneNominativo-1)esima linea, modificala, e quindi riscrivi tutto l'array sullo stesso file sovrascrivendolo."

StreamWriter crea il file se non esiste, ma lo sovrascrive se esiste.
aaa
24/06/08 12:19
alpi39
Postato originariamente da Il Totem:

Klez91 ha perfettamente ragione. E' inutile eliminare tutto quando puoi sovrascrivere, come ti avevo suggerito nell'altro topic:
StreamWriter crea il file se non esiste, ma lo sovrascrive se esiste.


Ciao Totem
sono proprio un imbranato,
ma sono molto contento che anche tu sia intervenuto in questo thread per aiutarmi a risolvere il problema.
Ho provato a chiudere il file in lettura prima di sovrascrivere il file "Agenda.txt" con il nuovo testo modificato, ma non mi riesce neanche con le indicazioni fornitemi da klez91.:(
Allora, senza cambiare directory, registro un nuovo file dal nome "Prova.txt" all'interno della cartella "Agenda" per vedere se il programma è OK per modificare o annullare un Nominativo. Ed effettivamente funziona.:k:
Però sarebbe molto meglio se potessi sovrascrivere il file nominandolo come il precedente "Agenda.txt",
Comunque posto la procedura riguardante la modifica del nominativo, nella speranza che possa avere un suggerimento più completo.

___________________________________________________
'Button3 serve per registrare un nominativo corretto
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Prepara 100 Record vuoti per memorizzare i Record registrati nell'Agenda.txt esisente
Dim Record(100) As String
Dim I As Integer
Dim Z As Integer
Dim Nominativo As String = ""
'Apre (per la lettura) il file C:\Agenda.txt
Dim Percorso As String = "C:\Agenda"
Dim PercorsoFile As String = "C:\Agenda\Agenda.txt"
'raccoglie i dati corretti scritti nelle TextBox per formare un unico racord
For I = 1 To 11
If I < 11 Then Nominativo = Nominativo + Me.Controls("TextBox" & I).Text + ("*";)
Next I
Nominativo = Nominativo + Me.Controls("TextBox" & 11).Text
'Apre il file Agenda.txt per rileggere e memorizzare tutti i Record registrati
Dim r As New IO.StreamReader("C:\Agenda\Agenda.txt";)
Z = 0
Do While Not r.EndOfStream
'Attribuisce alla variabile Record(Z)
'il Record, nel file Agena.txt, che sta leggendo
Z = Z + 1
Record(Z) = r.ReadLine
If Z = PosizioneRecord Then
Record(Z) = Nominativo
End If
Loop
Close()

'Crea nella cartella “Agenda”
'un nuovo file: “Prova.txt” se assente
'oppure lo apre in lettura e lo aggiorna attraverso la determinazione della sua esistenza (metodo fileExist)
Dim NuovoPercorsoFile As String = "C:\Agenda\Prova.txt"
For I = 1 To Z
' È possibile utilizzare Metodo My.Computer.FileSystem.
'WriteAllText per scrivere del testo all'interno dei file.
'Se il file specificato non esiste, viene creato automaticamente. My.Computer.FileSystem.WriteAllText(NuovoPercorsoFile, Record(I) + Chr(13), True)
Next I
'Elimina il testo dalle TextBox
'per consentire l'inserimento di un nuovo nominativo
Call ClearAllControls(Me)
End Sub
Ultima modifica effettuata da alpi39 24/06/08 12:24
aaa
24/06/08 12:36
klez91
Postato originariamente da alpi39:

Dim r As New IO.StreamReader("C:\Agenda\Agenda.txt";)
Z = 0
Do While Not r.EndOfStream
'Attribuisce alla variabile Record(Z)
'il Record, nel file Agena.txt, che sta leggendo
Z = Z + 1
Record(Z) = r.ReadLine
If Z = PosizioneRecord Then
Record(Z) = Nominativo
End If
Loop
Close()



Se tu chiami r lo StreamReader dopo non puoi chiuderlo utilizzando Close() che si riferisce a tutt'altra cosa ma devi chiuderlo con r.Close().
aaa
24/06/08 20:36
alpi39
Postato originariamente da klez91:

Se tu chiami r lo StreamReader dopo non puoi chiuderlo utilizzando Close() che si riferisce a tutt'altra cosa ma devi chiuderlo con r.Close().


Ciao klez91
ti ringrazio innanzitutto per il tuo intervento, anche se, pur avendo provato a chiudere il file in lettura come tu mi consigli con r.Close() il file in effetti non si chiude perché il programma mi segnala alla riga:

My.Computer.FileSystem.WriteAllText(PercorsoFile, Record(I) + Chr(13), True)

sottolineandola con un fondino giallo e la solita finestra che commenta:

IOException non è stata gestita
Il processo non può accedere al file 'C:\Agenda\Agenda.txt' perché è in uso da un altro processo.

Evidentemente riesco a restare all'interno della cartella Agenda, ma poiché non riesco a chiudere il file Agenda.txt per sovrascriverlo, il programma si blocca.
Rinnovo ancora i ringraziamenti per il tuo intervento.
alpi39 (Alberto)

aaa