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

Salve a tutti,
Allora, una domanda velocissima:
Io ho un file aperto tramite un FileStream.
Ora, setto la Position tramite l' apposita proprietà.
Ora, io voglio eliminare tutto ciò che va oltre quella posizione (tutto il 
restante file dal punto in cui si trova il cursore).
Come fare?
Bye,
-- 
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site 4 : 
http://www.thetotalsite.it
My Blog: 
http://blog.thetotalsite.it
MariokartDS Codice Amico: 532639027909 - CarmineC in MarioKartDS
Se un circuito funziona al primo tentativo è perchè il problema è molto più 
nascosto
e subdolo di quanto tu possa pensare...
E apparirà nel momento in cui farà il massimo danno 

 Come fare?
Soluzione brutale: riscrivere il file solo fino al punto che ti interessa.
-- 
Salutoni
Sergio
C'è il giorno in cui nasci e quello in cui scegli di vivere
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 interessa.
Si, però perdo moltissimo in performance...
Sopratutto quando si tratta di file molto grossi.


 Sopratutto quando si tratta di file molto grossi.
Ecco qua, cercati tu le declare mancanti:
Public Sub TruncateFile(sFileName As String, ByVal lSize As Long)
    '
    ' Prende il file esistente sFileName e lo tronca alla dimensione di
    ' lSize byte.
    '
    Dim hFile As Long
    hFile = CreateFile(sFileName, GENERIC_WRITE, FILE_SHARE_READ Or 
FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
    ' Questa API accetta l'offset come parte bassa a 32 bit + parte alta a 
32Bit
    Call SetFilePointer(hFile, lSize, 0, FILE_BEGIN)
    Call SetEndOfFile(hFile)
    Call CloseHandle(hFile)
End Sub
Ciao

 [CUT]
Argh! Tragedia...
Non c'è un modo senza API? Odio usarle...


 e perche' ? stanno li apposta per essere usate :-)
Si, però sono unmanaged, e non vorrei avere problemi poi quando passo le 
applicazioni su Vista.


 applicazioni su Vista.
Ma tu usi VB6 o VB.Net?
Ciao 

 Ma tu usi VB6 o VB.Net?
.Net...


 >> passo le applicazioni su Vista.
E perchè mai questo? Ho avuto modo di testare su Vista beta 32/64 alcuni miei sw che fanno massivo uso di API native / non documentate e funzionano alla perfezione pure loro.
Inoltre (ma posso sbagliarmi), io rimango del parere che l'architettura Win32, anche se la cosa non viene sbandierata, rimarrà alla base anche di Vista e successivi e che tutto il resto si collocherà al di sopra di esso (NET &C). Se è così, le performances migliori si otterranno, come è sempre stato, lavorando direttamente con le API piuttosto che con i layer sovrastanti.

 e funzionano alla perfezione pure loro.
Anche gli hook di sistema funzionano?
Cmq non vorrei utilizzare le API proprio per comodità.
Ma è possibile che in .net non ci sia un comando per troncare un file? 
Bah...


?
Nessuno?
Possibile che non c'è proprio altro modo?


Mi rispondo da solo...
C'è la comodissima possibilità di usare un metodo del classico filestream.
SetLenght.
In pratica riduce lo stream a quelle dimensioni.
Comodissimo.


> Anche gli hook di sistema funzionano?
Sì, e senza alcun problema.

 Sì, e senza alcun problema.
Fantastico!
Purtroppo non sono riuscito ad ordinare la beta di Vista...
Allora funzioneranno anche i keylogger... perfetto.
