Gestione file txt

sabato 10 febbraio 2007 - 11.19

Franto Profilo | Junior Member

Ciao a tutti, ho un problema di questo tipo.
Devo gestire la creazione, la lettura, la scrittura e la chiusura di un file .txt.

Per la lettura utilizzo: Open App.Path & "\Config.txt" For Output As #1 (che mi crea anche il file se non esiste)
Per la chiusura utilizzo: Close #1

Ma per la scrittura cosa BIP bisogna fare??
Pensavo bastasse fare : input #1, mioValore ma mi da l'errore "Input oltre la fine del file"...

Programmo in VB6

Giamp72 Profilo | Junior Member

dai non ti allarmare è molto più semplice di quanto pensi:

scrittura di un nuovo file (o riscrittura di un file esistente):

qh=freefile
open "C:\file.txt" for output as #qh
print #qh, "riga1"
print #qh, "riga2"
..
print #qh, "rigan"
close #qh


scrittura di un nuovo file (o riscrittura di un file esistente) in modalità append (accoda sempre le nuove righe):

qh=freefile
open "C:\file.txt" for append as #qh
print #qh, "riga1"
print #qh, "riga2"
..
print #qh, "rigan"
close #qh


Ti scrivo anche come leggere un file di testo:

qh=freefile
open "C:\file.txt" for input as #qh
while not eof(qh)
line input #qh,rigafile$
wend
close #qh

PS: come vedi utilizzo freefile per avere un handle libero... se usi #1 in qualche caso potrebbe enadare in errore...
ciao


Giamp72

Franto Profilo | Junior Member

Ciao, ho risolto quasi tutti i miei problemi con i file txt...ma me ne rimane uno :
Il mio file è così composto:

STMP=ALICE:out.alice.it|ARUBA.IT:smtp.aruba.it|FASTWEB:smtp.fastwebnet.it|INWIND:mail.inwind.it|IOL:mail.iol.it
DEF_STMP=
DEF_PATH=

Io devo accedere al file e aggiorare la seconda riga con un valore.

Se apro il file in Output mi cancella il contenuto, se lo apro in Input non posso fare la Print e faccio l'Append accoda alla fine.

?????????????COME FACCIO????????????

Grazie in anticipo

Giamp72 Profilo | Junior Member

la cosa più semplice e veloce da fare è leggere il file dall'inizio alla fine e poi riscriverlo aggiornato.

per esempio

qh=freefile
open nomefile for input as #qh
while not eof(qh)
i=i+1
line input #qh,riga
if i=2 then
'modifico la riga 2
riga= "nuovo valore"
end if
totale=totale & riga & vbcrlf
wend
close #qh

qh=freefile
open nomefile for output as #qh
print #qh, totale
close #qh

In alternativa potresti usare l'istruzione seek per posizionarti in un punto preciso del file, ma è + complicato perchè essendo il file sequenziale dovresti preventivamente lasciare lo spazio (magari con dei caratteri space) entro il quale scriverai in seguito i valori...

Piuttosto, vedo che il tuo file ha la stessa struttura di un INI file.. perciò potevi usare le api

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

queste API sono ideali quando il file ha una struttura

[sezione1]
parametro1=valore
parametro2=valore
parametro3=valore
[sezione2]
parametro1=valore
parametro2=valore

se fosse fatto così i vari parametri e relative sezioni si scrivono così:

q = WritePrivateProfileString(nomesezione, nomeparametro, valore, Filename)

e si leggono così:

a = Space$(3000)
q = GetPrivateProfileString(nomesezione, nomeparametro, valoredefault, valoreletto, 3000, Filename)
'valoreletto è il valore letto dal file

ciao

Giamp72

Franto Profilo | Junior Member

Grazie di tutto.
Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5