Salve, ho riscontrato il problema tentando di scrivere un file di testo:
If (my_response) Then
my_file = Open "./fatture_user/Utente.ftr" For Write
For i = 0 To 4
Write #my_file, dati_utente[i]
Next
my_file.Close
Endif
Ho provato anche con For Create ma nulla >:(
perché compare questo errore?
Alla voce dell'errore c'è un laconico "mancano i permessi contattare l'amministratore"
amministratore ? ??? permessi ?? ??? ???
non sto variando un file di sistema !
Che istruzione devo dare per scrivere questo benedetto file? :-\
Grazie
:ciao:
P.S. non mi ricordo più come si fa a mettere [risolto] nel precedente topic :-[ :-[ scusate ...
Penso che tu sappia che linux attribuisce i permessi di lettura, scrittura, esecuzione a ciascun file o cartella in relazione a ciascun utente.
Devi controllare che la cartella e sotto cartelle siano accessibili all'utente in uso.
Avevo già provato (ma senza risultato) a modificare i permessi in modo che "tutti" avevao il permesso di leggere e scrivere. 8)
Mi sa che devi studiarti meglio i percorsi relativi, dai un occhio a questo
ti porto ad esempio :
Public Sub load_prestazioni()
Dim my_file As File
Dim s$, er_t As String
Try my_file = Open "./fatture_user/Tipo_Prestazioni.ftr" For Read
If Error Then
er_t = "Impossibile aprire il file Prestazioni causa:\n" & Error.Text
Message.Error(er_t)
Return
Endif
lista_prestaz = New String[]
While Not Eof(my_file)
Line Input #my_file, s$
lista_prestaz.Add(s$)
Wend
num_prestaz = lista_prestaz.Count - 1
my_file.Close
End
in questo caso il percorso "relativo" funziona. 8)
In realtà credo che vi sia qualcosa da "settare" in Gambas per poter aver accesso in scrittura,
poiché se uso la libreria esterna "libc:6" riesco a creare senza patemi d'animo il file ... ;)
Non solo ma anche l'istruzione "Mkdir" nativa di gambas si rifiuta ! ???
Quindi mi si avvalora l'idea dei presunti "settagi" di prima.
Grazie :ciao: :ciao:
Credo proprio che tu non abbia letto attentamente quanto ti ho indicato prima.
my_file = Open "./fatture_user/Tipo_Prestazioni.ftr" For Read
Può funzionare solo nel caso che la cartella fatture_user sia presente all'interno del progetto e solo in lettura non in scrittura.
:ciao:
La cartella è presente, ed ha accesso a tutti sia in lettura che in scrittura.
So che tu non ami molto l'uso delle librerie esterne ma ..
Try my_file = Open "./fatture_user/Utente.ftr" For Write
If Error Then
er_t = "Impossibile aprire il file Prestazioni causa:\n" & Error.Text
Message.Error(er_t)
Else
Write #my_file, my_utente.nome_completo
my_file.Close
Endif
questo non funziona mentre ..
pnt1 = fopen("./fatture_user/Utente.ftr", "w")
il file lo crea.
Ora devo capire bene quale funzione usare per scriverci dentro, ci sto lavorando. :-\
Sto provando con
' ssize_t write (int __fd, const void *__buf, size_t __n)
' Write N bytes of BUF to FD.
Private Extern write_C(__fd As Integer, __buf As Pointer, __n As Long) As Long Exec "write"
my_str = my_utente.nome_completo
pnt2 = VarPtr(my_str)
write_C(Int@(pnt1 + 122), pnt2, 54)
ma non funge. ??? ???
Grazie
:ciao: :ciao:
Dal wiki:
Usare la funzione write( ) con la funzione fopen( )
Comunque ho trovato la "quadra" con:
Public Sub btn_reqins_Click()
Dim pnt1, pw, pr As Pointer
Dim i As Byte
Dim er_t As String
Dim dati_utente As String[]
Dim my_str As String
' popoliamo i campi utente ...
dati_utente = New String[]
dati_utente.Add(campi_utn[0] & utn_tb1.Text & "\n", 0)
dati_utente.Add(campi_utn[1] & utn_tb2.Text & "\n", 1)
dati_utente.Add(campi_utn[2] & utn_tb8.Text & "\n", 2)
dati_utente.Add(campi_utn[3] & utn_cb1.Text & " " & utn_tb3.Text & " " & utn_tb4.Text & " " & utn_tb5.Text & " " & utn_tb6.Text & " " & utn_tb7.Text & "\n", 3)
dati_utente.Add(campi_utn[4] & utn_tb9.Text, 4)
' ora prepariamo il puntatore per il file da aprire in scrittura ...
pnt1 = fopen("./fatture_user/Utente.ftr", "w")
If pnt1 = Null Then
er_t = "Impossibile aprire il file Prestazioni causa:\n" & Error.Text
Message.Error(er_t)
Else
' ... adesso i dati ...
For i = 0 To 4
'dati_utente[i]
pw = Alloc(dati_utente[i])
fwrite(pw, 1, Len(dati_utente[i]), pnt1)
Next
Endif
my_response = True
Free(pw)
fclose(pnt1)
requestwind.Close()
End
E funziona! ;D ;D ;D
Grazie a tutti per il supporto, una menzione particolare a Gianluigi e a vuott per la pazienza e i codici. :2birre: :2birre:
Quando tutto "l'ambaradan" funzionerà a dovere mi occuperò della pacchettizzazione i. .deb
Non temete vi "romperò i ..." ancora ;D ;D ;D
:ciao: :ciao: