Newsgroup: it.comp.programmare.win32
Titolo: [?] Accorciare un file

E' possibile con codice VB (o con API di Windows) accorciare (troncare) la
lunghezza di un file (aperto e/o chiuso poco importa) ?
Grazie in anticipo per eventuali suggerimenti
Soviet-Mario

lunghezza di un file (aperto e/o chiuso poco importa) ?
Trovi un esempio in questo post di *Roby* Piazzolla:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=8dsp4u%243om%241%40nslave2.tin.it
-- 
ciao, hal

 wrote in message
ovk4kvc00h6j16cht...@4ax.com...


lunghezza di un file (aperto e/o chiuso poco importa) ?
--- In Dichiarazioni Generali metti:
'API e costanti per troncare la fine del file.
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_BEGIN = 0
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long)
As Long
Private Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long,
ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal
dwMoveMethod As Long) As Long
Private Declare Function SetEndOfFile Lib "kernel32" (ByVal hFile As Long)
As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA"
(ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal
dwShareMode As Long, lpSecurityAttributes As Long, ByVal
dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal
hTemplateFile As Long) As Long
--- Questa invece è la routine che chiamerai quando vuoi troncare il file
(lSize corrisponde alle nuove dimensioni del file).
Public Sub TruncateFile(sFileName As String, ByVal lSize As Long)
  'Prende il file esistente sFileName e lo tronca alla dimensione di lSize
byte.
    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 32
Bit per files più grandi di 2Gb.
    ret& = SetFilePointer(hFile&, lSize, 0&, FILE_BEGIN)
    ret& = SetEndOfFile(hFile&)
    ret& = CloseHandle(hFile&)
End Sub

 soprattutto la ragione).
<prefazione>
di solito si dovrebbe poostare un messaggio solo su un newsgroup ed
aspettare risposte almeno per qualche giorno prima di ritentare la fortuna
su altri newsgroup.
</prefazione>
poi ci sono alcune pratiche che vengono mal viste ma alle volte accettate,
come il multi-post, che non e' null'altro che postare lo stesso identico
messaggio su piu' newsgroup che potrebbero essere inerenti (questo non e'
nient'altro che creare tot copie del messaggio originale e postarlo sui tot
newsgroup)
invece alla fine c'e' una pratica che veramente fa' imbestialire tutti gli
utenti dei newsgroup che e' quella di crospottare il messaggio (questa
pratica sta sul culo perche' crea un notevole traffico di rete di messaggi
tutti uguali in N newsgroup, ed e' visto alla stregua di un attacco DDOS)
questo succede quando nell'area newsgroup del tuo reader inserisci piu'
newsgroup a cui spedire lo stesso messaggio, ma il problema non sta solo li,
disolito chi ti risponde se non e' attentissimo non ci fa caso e usa il tuo
stesso crospott impostato per risponderti, ed e' qui' che si genera traffico
su traffico di messaggi inutili ... (prova a fare conto di mandare 20k di
testo a100 news (totale 200k di traffico) ti rispondono 100 persone quotando
il tuo messaggio ed aggiungendo altri 20k (tot 4000k) se poi la discussione
e' molto rapida e molto seguita vedi anche tu che il traffico generato e'
assurdo, se fai conto che ogni server di news deve rimandare lo stesso
traffico verso l'alto della catena dei news e che questo deve raggiungere
tutti i server noti anche tu che se ci sono 1000 persone come te nel mondo
si ottiene di creare 4200000k che vanno di news server in news server
consumando banda internet per nulla ... quando se il post fosse stato
normale avresti ottenuto al massimo un uso di 420k understand ?
quindi il suggerimento e' di evitare come la peste il crosspotting di
messaggi al massimo (anche se non sarai cmq visto bene come utente) usa la
prima pratica.
spero ti sia utile questa piccola digressione su un funzionamento astratto
di usenet e del comportamento degli utenti
ciao

 Bit per files piů grandi di 2Gb.
