Newsgroup: it.comp.lang.visual-basic
Titolo: modificare un file

Salve a tutti.
vorrei capire come aprire un file
in modalità binaria modificare una stringa all'interno
poi salvare il file con altro nome con le modifiche fatte
lasciando invariato l'originale!!!
Grazie a Tutti
Fabry!

lasciando invariato l'originale!!!
Cerca sulla guida:
Open 
Seek
Get
Put
Name
-- 
hth, hal

 ha scritto nel messaggio
news:a0l6r8$lf34v$1...@ID-56381.news.dfncis.de...

ho provato ma non ho capito un tubo
potresti essere più preciso(Se Vuoi)
Fabry

 potresti essere piů preciso(Se Vuoi)
Open -> Apre un file in modalita testo, binaria... (vedi sull'help per
maggiori info...)
Seek -> Si posiziona all'interno di un file ad una data posizione... (vedi
sull'help per maggiori info...)
Get -> Legge da un file una serie di caratteri... (vedi sull'help per
maggiori info...)
Put -> Scrive su un file una serie di caratteri... (vedi sull'help per
maggiori info...)
Name -> (di questa non sono sicuro, ma credo che assegni un nome... vedi
sull'help per maggiori info...)

sull'help per maggiori info...)
In realta', serve per rinominare i file, ma nel suo caso ho toppato perche'
utility voleva lavorare su una copia, quindi puo' scrivere direttamente il
nuovo file oppure copiare quello originario con CopyFile (o FileCopy? non
mi ricordo mai) e lavorare direttamente solo sulla copia.
-- 
ciao, hal

 ha scritto nel messaggio
news:bVsX7.3933$8D5.2...@news2.tin.it...

Grazie mille
spero di uscirne da questo lungo tunnel....Sob!   Sigh!
:(
Fabry!

 ha scritto nel messaggio
news:a0n048$llbha$1...@ID-56381.news.dfncis.de...


 ciò che vorrei fare? :(
Sì, e ti è anche stato detto come, direi. Se quello che ti serve è una
routine pronta, il discorso cambia...
Giusto per darti qualche dritta: con FileCopy fai una copia del file
che devi modificare; con Open "nomedeifile" for Binary as FileNumeroDelFile
apri un file in lettura, e uno vuoto in scrittura; con Seek ti sposti nel file
d'ingresso; con Get prendi i dati; con Mid, con Replace e/o altre funzioni
per la gestione delle stringhe sostituisci i dati; con Put li scrivi; con Close
chiudi i file aperti quando hai finito.
Per ognuna di queste funzioni c'è l'help.
Se quello che ti interessa non è imparare a farlo, ma solo farlo, c'è un post
recente di Luca Dormio. Prova a vedere il thread che c'è stato gli ultimi
giorni di Novembre, cerca "file binario" su questo NG su Google:
http://groups.google.com/advanced_group_search
Ti dovrebbe dare questo link:
http://groups.google.com/groups?hl=it&threadm=377176b3cd02894f161c3912807dfa26.8
005%
40mygate.mailgate.org
&rnum=1&prev=/groups%3Fas_q%3Dfile%2520binario%26as_ugr
oup%3Dit.comp.lang.visual-basic%26as_drrb%3Db%26as_mind%3D25%26as_minm%3D11%26as
_miny%3D2001%26as_maxd%3D31%26as_maxm%3D11%26as_maxy%3D2002%26num%3D50%26hl%3Dit
ma mi sa che fai prima a ripetere la ricerca che a ricomporlo :-)))
Bye, G.

 lasciando invariato l'originale!!!
Visto che lo avevo già fatto anche io qualche tempo fa, ti copio in questo
messaggio il codice della procedura.
Subito l'avevo fatta con la lettura byte per byte (senza array), ma per
leggersi un file di 11 Mb ci aveva messo troppo tempo; ho deciso così di
modificarlo con un buffer di 50000 bytes (ora e' quasi istantaneo).
Nell'esempio sottostante, cambio tutte le A in B.
Non c'è controllo di errore perchè mi serviva una cosa veloce da fare in
maniera mirata, ma puoi sempre aggiungerlo tu.
===BEGIN===
Const DimBuffer As Long = 50 * 1024
Dim FileIn As Long, FileOut As Long
ReDim X(1 To DimBuffer) As Byte
Dim ValoreDaCercare As Byte, ValoreNuovo As Byte
Dim I As Long, BytesRimasti As Long
Dim NomeFileInput As String, NomeFileOutput As String
NomeFileInput = "c:\fileinput.exe"
NomeFileOutput = "c:\fileoutput.exe"
ValoreDaCercare = 65 'Lettera A
ValoreNuovo = 66 'Lettera B
FileIn = FreeFile
Open NomeFileInput For Binary Access Read As #FileIn
FileOut = FreeFile
Open NomeFileOutput For Binary Access Write As #FileOut
BytesRimasti = FileLen(NomeFileInput)
While Not EOF(FileIn)
    Get #FileIn, , X
    If BytesRimasti < DimBuffer Then
        ReDim Preserve X(1 To BytesRimasti)
        End If
    For I = LBound(X) To UBound(X)
        If X(I) = ValoreDaCercare Then X(I) = ValoreNuovo
        Next I
    Put #FileOut, , X
    BytesRimasti = BytesRimasti - DimBuffer
Wend
Close #FileIn
Close #FileOut
===END===
Michele
--
Per l'e-mail togli "xxx".