Newsgroup: it.comp.lang.visual-basic
Titolo: Lettura di parti di files

Salve a tutti.
Dovrei farmi una funzioncina che mi restituisca una porzione di file,
spiego meglio: passati path, start e lunghezza, deve restituirmi una
stringa o un variant contenente il "pezzo" di file che parte da START e
lungo LUNGHEZZA (un pò come la funzione mid per intendersi).
esempio: estrai ("pippo.avi", 30500, 500) mi rende esattamente la sezione
dal 30500simo byte fino al 310000esimo del file pippo.avi. 
Ma come fare? FSO non mi pare preveda qualcosa del genere, con la open
posso impostare il buffer, ma se non sbaglio mi legge solo dal primo byte
fino al riempimento del buffer.
Come posso fare?
Grazie a tutti
Ale
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Io farei:
dim BuffSym as string,estrai as string
  Open "pippo.txy" For Input As #1      'Binary  +lento
    BuffSym = Input$(LOF(1) - 1, #1)
   Close 1
estrai=mid$(BuffSym, 30500, 500)
-------------
ciao
 Stefano




ho visto ora, prima che qualcuno lo dica...
meglio usare freefile
dim fr as long
fr=freefile
 Open "pippo.txy" For Input As #fr      'Binary  +lento
.........
 Close Fr
ciao
 Stefano


ricordati che esiste la funzione Sekk o qualcosa del genere per
recuperare/impostare la posizione all'interno di un file aperto, sulla guida
in linea di VB ci sono anche gli esempi dettagliati.


wrote:

istruzione Seek
giusto, non ci avevo pensato
(pensavo ci fosse solo in Qb)
allora diventa:
dim fr as long
fr=freefile
 Open "pippo.txy" For Input As #fr    
Seek #Fr, 30500
BuffSym = Input$(500 , #Fr)
Close Fr
ciao
 Stefano

  Close fr
Meglio:
Close #fr
Lokar.tanto.per.puntualizzare
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

[SB = 
circa_stNO...@tin.it
 in
psnb5057990jui42q...@4ax.com
] ha scritto:


Quel commento (Binary + lento) mi ha incuriosito. Sarebbe la modalità Binary
più lenta della Input?
Inoltre (ma non ne sono certo) se quel file contiene 0 o EOF (mi pare sia
26, che mi pare sia il vecchio Ctrl+Z) dici che la Input$ funziona lo
stesso, ovvero tira su comunque tutto il blocco richiesto?

 stesso, ovvero tira su comunque tutto il blocco richiesto?
...aggiungo che se usiamo FSO la lettura Binary ce la possiamo scordare! ;)
saluti,

più lenta della Input?
Si, più lento e neanche di poco.
Dopo diverse prove fatte a suo tempo  (con VB5 un 486 e W95) per
leggere un file durante l'apertura del programma ho verificato questo
fatto, e per velocizzare ancora di più alla fine ho usato le API:
---------------------------
 Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA"
(ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal
dwShareMode As Long, _
  lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long,
ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As
Long
 Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long,
lpBuffer As Any, ByVal nNumberOfBytesToRead As Long,
lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
 Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As
Long) As Long
Fl& = FileLen("SYM.SRC")
BuffSym = Space(Fl&) ' make room in the buffer
hFile = CreateFile("SYM.SRC", GENERIC_READ, FILE_SHARE_READ, ByVal
CLng(0), OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0)
retval = ReadFile(hFile, ByVal BuffSym, Fl&, numread, ByVal CLng(0))
retval = CloseHandle(hFile)    'CHIUDI IL FILE
-----------------------
parecchio più veloce, non mi chiedere perchè
Sul control+Z non ho fatto prove, il mio file era tutto ASCII, anche
se piuttosto grosso.
ciao
 Stefano

 se piuttosto grosso.
Imposizione/limitazione importante, insomma, di cui tenere conto, se no non
va più una cippa. ;-)

  Stefano
Ricky



Dovresti postare il codice con cui leggi in binary e input
Io leggevo un file di 600k, e le differenze le ho riscontrate, anche
se alla fine come ho detto ho usato le API
ciao
  Stefano

visto che impiega comunque poco.
Si, ma se hai letto i post precedenti, usavo un 486 con W95.
Un portatile da fiera che un cliente plumone non voleva cambiare.
E se il programma gira lento, tutta colpa del povero softwarista.
 ciao
   Stefano

    Stefano
Ricky