Differenze tra le versioni di "Ottenere all'apertura di un file un Puntatore anziché una variabile di tipo File"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Come è noto, attualmente Gambas consente di gestire un file, aperto con l'istruzione ''Open ... For'', attraverso una variabile di tipo ''File''. <BR>Se, invece, all'apertura...')
 
Riga 1: Riga 1:
 
Come è noto, attualmente Gambas consente di gestire un file, aperto con l'istruzione ''Open ... For'', attraverso una variabile di tipo ''File''.
 
Come è noto, attualmente Gambas consente di gestire un file, aperto con l'istruzione ''Open ... For'', attraverso una variabile di tipo ''File''.
<BR>Se, invece, all'apertura di un file si intende ottenere in modo particolare per operare con le funzioni esterne, una variabile di tipo ''Puntatore'', per gestire tale file, anziché una variabile di tipo ''File'', bisognerà utilizzare la funzione ''fopen()'' della libreria di C.
+
<BR>Se, invece, all'apertura di un file si intende ottenere in modo particolare per operare con le funzioni esterne, una variabile di tipo ''Puntatore'', per gestire tale file, anziché una variabile di tipo ''File'', bisognerà utilizzare la funzione ''fopen()'' della libreria di C. Conseguentemente, per la gestione del fie attraverso il puntatore, si useranno le altre funzioni di C appartenenti alla famiglia ''f...'' .
  
  
Riga 21: Riga 21:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim pf As Pointer
+
   Dim <FONT Color=#B22222>'''pf'''</font> As Pointer
 
   Dim b As Byte
 
   Dim b As Byte
 
   Dim bb As New Byte[]
 
   Dim bb As New Byte[]
Riga 27: Riga 27:
 
   
 
   
 
  <FONT Color=gray>' ''Apre il file ad esempio in lettura:''</font>
 
  <FONT Color=gray>' ''Apre il file ad esempio in lettura:''</font>
   pf = <FONT Color=#B22222>fopen</font>("''/percorso/del/file/da/leggere''", "rb")
+
   <FONT Color=#B22222>'''pf'''</font> = <FONT Color=#B22222>fopen</font>("''/percorso/del/file/da/leggere''", "rb")
 
   
 
   
 
  <FONT Color=gray>' ''Legge il file, ponendo i suoi byte in un vettore:''</font>
 
  <FONT Color=gray>' ''Legge il file, ponendo i suoi byte in un vettore:''</font>
 
   while True
 
   while True
     r = fread(VarPtr(b), 1, 1, pf)
+
     r = <FONT Color=#B22222>fread</font>(VarPtr(b), 1, 1, <FONT Color=#B22222>'''pf'''</font>)
 
     If r = 0 then Break;
 
     If r = 0 then Break;
 
     bb.Add(b)
 
     bb.Add(b)
 
   Wend
 
   Wend
 
   
 
   
   fclose(p)
+
   <FONT Color=#B22222>fclose</font>(<FONT Color=#B22222>'''pf'''</font>)
 
   
 
   
 
   
 
   
 
  <FONT Color=gray>' ''Apre il file in scrittura:''</font>
 
  <FONT Color=gray>' ''Apre il file in scrittura:''</font>
   pf = <FONT Color=#B22222>fopen</font>("''/percorso/del/file/da/scrivere''", "wb")
+
   <FONT Color=#B22222>'''pf'''</font> = <FONT Color=#B22222>fopen</font>("''/percorso/del/file/da/scrivere''", "wb")
 
   
 
   
 
  <FONT Color=gray>' ''Scrive i byte letti in un nuovo file:''</font>
 
  <FONT Color=gray>' ''Scrive i byte letti in un nuovo file:''</font>
   r = fwrite(bb, bb.Count, 1, pf)
+
   r = <FONT Color=#B22222>fwrite</font>(bb, bb.Count, 1, <FONT Color=#B22222>'''pf'''</font>)
 
        
 
        
   fclose(p)
+
   <FONT Color=#B22222>fclose</font>(<FONT Color=#B22222>'''pf'''</font>)
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 03:20, 7 nov 2014

Come è noto, attualmente Gambas consente di gestire un file, aperto con l'istruzione Open ... For, attraverso una variabile di tipo File.
Se, invece, all'apertura di un file si intende ottenere in modo particolare per operare con le funzioni esterne, una variabile di tipo Puntatore, per gestire tale file, anziché una variabile di tipo File, bisognerà utilizzare la funzione fopen() della libreria di C. Conseguentemente, per la gestione del fie attraverso il puntatore, si useranno le altre funzioni di C appartenenti alla famiglia f... .


Mostriamo un esempio essenziale:

Library "libc:6"

' FILE *fopen(const char *path, const char *mode)
Private Extern fopen(path As String, mode As String) As Pointer

' size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
Private Extern fread(ptr As Pointer, size As Integer, nmemb As Integer, fs As Pointer) As Integer

' size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
Private Extern fwrite(ptr As Byte[], size As Integer, nmemb As Integer, fs As Pointer) As Integer

' int fclose(FILE *stream)
Private Extern fclose(fs As Pointer) As Integer


Public Sub Main()

 Dim pf As Pointer
 Dim b As Byte
 Dim bb As New Byte[]
 Dim r As Integer

' Apre il file ad esempio in lettura:
  pf = fopen("/percorso/del/file/da/leggere", "rb")

' Legge il file, ponendo i suoi byte in un vettore:
  while True
    r = fread(VarPtr(b), 1, 1, pf)
    If r = 0 then Break;
    bb.Add(b)
  Wend

  fclose(pf)


' Apre il file in scrittura:
  pf = fopen("/percorso/del/file/da/scrivere", "wb")

' Scrive i byte letti in un nuovo file:
  r = fwrite(bb, bb.Count, 1, pf)
      
  fclose(pf)

End