Differenze tra le versioni di "Ottenere all'apertura di un file un Puntatore anziché una variabile di tipo File"
Da Gambas-it.org - Wikipedia.
(5 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 5: | Riga 5: | ||
Library "libc:6" | Library "libc:6" | ||
− | <FONT Color=gray>' ''FILE *fopen(const char * | + | <FONT Color=gray>' ''FILE *fopen(const char *__filename, const char *__modes)''</font> |
− | Private Extern fopen( | + | Private Extern fopen(__filename As String, __modes As String) As Pointer |
− | <FONT Color=gray>' ''size_t fread(void * | + | <FONT Color=gray>' ''size_t fread(void *__ptr, size_t __size, size_t __n, FILE *__stream)''</font> |
− | Private Extern fread( | + | Private Extern fread(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long |
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''int feof(FILE *__stream)''</font> |
− | Private Extern | + | Private Extern feof(__stream As Pointer) As Integer |
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''size_t fwrite(void *__ptr, size_t __size, size_t __n, FILE *__stream)''</font> |
− | Private Extern | + | Private Extern fwrite(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long |
− | <FONT Color=gray>' ''int fclose(FILE * | + | <FONT Color=gray>' ''int fclose(FILE *__stream)''</font> |
− | Private Extern fclose( | + | Private Extern fclose(__stream As Pointer) As Integer |
− | + | Public Sub Main() | |
Dim <FONT Color=#B22222>'''pf'''</font> 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[] | ||
− | |||
<FONT Color=gray>' ''Apre il file in lettura:''</font> | <FONT Color=gray>' ''Apre il file in lettura:''</font> | ||
− | <FONT Color=#B22222>'''pf'''</font> = <FONT Color=#B22222>fopen</font>("<FONT Color= | + | <FONT Color=#B22222>'''pf'''</font> = <FONT Color=#B22222>fopen</font>("<FONT Color=darkgreen>''/percorso/del/file/da/leggere''</font>", "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> | ||
Do | Do | ||
<FONT Color=#B22222>fread</font>(VarPtr(b), 1, 1, <FONT Color=#B22222>'''pf'''</font>) | <FONT Color=#B22222>fread</font>(VarPtr(b), 1, 1, <FONT Color=#B22222>'''pf'''</font>) | ||
− | If feof(pf) then Break | + | If <FONT Color=#B22222>feof</font>(<FONT Color=#B22222>'''pf'''</font>) then Break |
− | bb. | + | bb.Push(b) |
Loop | Loop | ||
<FONT Color=#B22222>fclose</font>(<FONT Color=#B22222>'''pf'''</font>) | <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> | ||
− | <FONT Color=#B22222>'''pf'''</font> = <FONT Color=#B22222>fopen</font>("<FONT Color= | + | <FONT Color=#B22222>'''pf'''</font> = <FONT Color=#B22222>fopen</font>("<FONT Color=darkgreen>''/percorso/del/file/da/scrivere''</font>", "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> | ||
− | + | <FONT Color=#B22222>fwrite</font>(bb.Data, bb.Count, 1, <FONT Color=#B22222>'''pf'''</font>) | |
− | + | ||
<FONT Color=#B22222>fclose</font>(<FONT Color=#B22222>'''pf'''</font>) | <FONT Color=#B22222>fclose</font>(<FONT Color=#B22222>'''pf'''</font>) | ||
− | + | End |
Versione attuale delle 23:59, 8 dic 2023
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 esterna "fopen()" della libreria di C. Conseguentemente, per la gestione del file attraverso il Puntatore, si useranno le altre funzioni di C capaci di gestire tale Puntatore.
Mostriamo un esempio essenziale:
Library "libc:6" ' FILE *fopen(const char *__filename, const char *__modes) Private Extern fopen(__filename As String, __modes As String) As Pointer ' size_t fread(void *__ptr, size_t __size, size_t __n, FILE *__stream) Private Extern fread(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long ' int feof(FILE *__stream) Private Extern feof(__stream As Pointer) As Integer ' size_t fwrite(void *__ptr, size_t __size, size_t __n, FILE *__stream) Private Extern fwrite(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long ' int fclose(FILE *__stream) Private Extern fclose(__stream As Pointer) As Integer Public Sub Main() Dim pf As Pointer Dim b As Byte Dim bb As New Byte[] ' Apre il file in lettura: pf = fopen("/percorso/del/file/da/leggere", "rb") ' Legge il file, ponendo i suoi byte in un vettore: Do fread(VarPtr(b), 1, 1, pf) If feof(pf) then Break bb.Push(b) Loop fclose(pf) ' Apre il file in scrittura: pf = fopen("/percorso/del/file/da/scrivere", "wb") ' Scrive i byte letti in un nuovo file: fwrite(bb.Data, bb.Count, 1, pf) fclose(pf) End