Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Ho visionato e letto i titoli di tutte le 40 pagine del forum
Forum - C# / VB.NET - Ho visionato e letto i titoli di tutte le 40 pagine del forum

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
alpi39 (Normal User)
Pro


Messaggi: 63
Iscritto: 07/03/2008

Segnala al moderatore
Postato alle 17:10
Lunedì, 23/06/2008
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:

PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:24
Lunedì, 23/06/2008
Se stai usando Vb.Net la procedura è :
Codice sorgente - presumibilmente Plain Text

  1. IO.Directory.Delete("PercorsoCartella", True)


PM Quote
Avatar
alpi39 (Normal User)
Pro


Messaggi: 63
Iscritto: 07/03/2008

Segnala al moderatore
Postato alle 21:48
Lunedì, 23/06/2008
Testo quotato

Postato originariamente da klez91:

Se stai usando Vb.Net la procedura è :
Codice sorgente - presumibilmente Plain Text

  1. 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 il 23/06/2008 alle 21:54
PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 22:38
Lunedì, 23/06/2008
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:

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:23
Martedì, 24/06/2008
Klez91 ha perfettamente ragione. E' inutile eliminare tutto quando puoi sovrascrivere, come ti avevo suggerito nell'altro topic:
Testo quotato

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.

PM Quote
Avatar
alpi39 (Normal User)
Pro


Messaggi: 63
Iscritto: 07/03/2008

Segnala al moderatore
Postato alle 14:19
Martedì, 24/06/2008
Testo quotato

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 il 24/06/2008 alle 14:24
PM Quote
Avatar
klez91 (Normal User)
Pro


Messaggi: 117
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:36
Martedì, 24/06/2008
Testo quotato

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().

PM Quote
Avatar
alpi39 (Normal User)
Pro


Messaggi: 63
Iscritto: 07/03/2008

Segnala al moderatore
Postato alle 22:36
Martedì, 24/06/2008
Testo quotato

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)


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:40
Mercoledì, 25/06/2008
Non ha senso, è quasi come l'errore di strikeluke. Usa streamwriter al posto di writealltext.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo