View Full Version : [VB] Scrivere un file
Ciao a tutti,
sto cercando di fare un semplice programma con VBasic, però non riesco a risolvermi un problema:
Quando uso il comando Write# il programma mi scrive le stringhe tr virgolette.
In pratica:
Write #1, "Antonio fa caldo!"
Lui scrive nel file "Antonio fa caldo!"
Mentre io voglio che mi scriva solo Antonio fa caldo!
Avete la soluz?
Grazie
Prova a mettere PRINT al posto di WRITE
GogetaSSJ
09-01-2004, 08:06
Originariamente inviato da matpez
Prova a mettere PRINT al posto di WRITE
Invece di provare, usa PRINT perchè è la soluzione giusta ;)
Originariamente inviato da GogetaSSJ
Invece di provare, usa PRINT perchè è la soluzione giusta ;)
Prova è un modo di dire :p
Se no nn replicavo se nn ero sicuro :)
Ottimo!!!
Grazie ragazzi.
Però ditemi una cosa...
Forse è impossibile, ma c'è la possibilità di trasferire una file TXT via internet?
Cioè io ho un sito web dove devo spedire un file TXt sempre aggiornato via FTP, posso farlo con VB senza dover creare il TXT con VBasic e poi spedirlo con Un client?
E' tanto complesso?
In pratica volevo fare un pulsante che mandasse il file via FTP...
Forse è fanstascienza!
No per nulla...
Ti posto una mio procedura.
Option Explicit
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, ByVal lpszRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
Private Sub SendFileFTP()
On Error GoTo Errore
Dim sFileRemote As String
Dim sDirRemote As String
Dim sFileLocal As String
Dim lOpen As Long
Dim lConnection As Long
Dim nFreeFile As Integer
'trasferisco il file nel FTP
DoEvents
lOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
lConnection = InternetConnect(lOpen, LeggiPreferences("DATI FTP", "Host"), INTERNET_INVALID_PORT_NUMBER, LeggiPreferences("DATI FTP", "UserName"), mcCrypt.DecryptAPI(LeggiPreferences("DATI FTP", "Password"), "Id9VhDCX21", True), INTERNET_SERVICE_FTP, IIf(LeggiPreferences("DATI FTP", "AccessoPassivo") = "0", 0, INTERNET_FLAG_PASSIVE), 0)
If lOpen <> 0 And lConnection <> 0 Then
'creo il file da mettere sul FTP
nFreeFile = FreeFile
Open App.Path & "\" & LeggiPreferences("DATI FTP", "File") For Output As #nFreeFile
Print #nFreeFile, CreaFTPFile(LeggiPreferences("DATI FTP", "FileCode"))
Close #nFreeFile
sDirRemote = "/" & LeggiPreferences("DATI FTP", "Cartella")
sFileRemote = LeggiPreferences("DATI FTP", "File")
sFileLocal = App.Path & "\" & sFileRemote
Call rcd(LeggiPreferences("DATI FTP", "Host"), sDirRemote, lConnection)
'mando il file all'FTP
DoEvents
bSendFileFTP = FtpPutFile(lConnection, sFileLocal, sFileRemote, FTP_TRANSFER_TYPE_BINARY, 0)
'elimino il file
Call Kill(App.Path & "\" & LeggiPreferences("DATI FTP", "File"))
End If
End Sub
Private Sub rcd(ByVal sHost As String, sDir As String, ByVal lConnection As Long)
On Error GoTo Errore
Dim sPathFromRoot As String
If sDir = "" Then
Exit Sub
Else
If InStr(1, sDir, sHost) Then
sPathFromRoot = Mid$(sDir, Len(sHost) + 1, Len(sDir) - Len(sHost))
Else
sPathFromRoot = sDir
End If
If sPathFromRoot = "" Then
sPathFromRoot = "/"
End If
Call FtpSetCurrentDirectory(lConnection, sPathFromRoot)
End If
End Sub
Se nn capisci qlc nel codice chiedi pure! :p
Non è per NIENTE complicato!
SCHERZI?
Io non ci ho capito niente!!!
Però sono sicuro che funzionerà!
Dimmi solo dove devo mettere l'indirizzo FTP, la pass, l'account e il nome del file da trasf
Ciao e grazie (scusa l'ignoranza)
Ah, un'altra cosa.
Ho visto che li c'è una funz di kill, vuol dire che cancella il file dopo averlo mandato?
Se io voglio che mandi il tutto con un pulsante dove devo metterlo quel codice?
Grazie ancora
- Si kill elimina il file creato dopo averlo mandato!
- Per metterlo in un command basta che crei un command e richiami la funzione SendFileFTP
- Per i dati nell'FTP devi cambiare questa riga:
lConnection = InternetConnect(lOpen, HOST, INTERNET_INVALID_PORT_NUMBER, USER_NAME, PASSWORD, INTERNET_SERVICE_FTP, ACCESSO_PASSIVO, 0)
E cambi quesi: HOST, USER_NAME, PASSWORD. ACCESSO_PASSIVO (dove metti 0 per sidattivarlo, e il parametro INTERNET_FLAG_PASSIVE per attivarlo
Ho abbastanza capito, però rispetto al codice che avevi messo sopra c'è qualche diff...
Cioè dal cod sopra sembra che questi dati se li ricavi in qualche altro modo, tipo leggendoli da file.
Poi, il file da spedire, ponendo che sia ciccio.txt, dove lo devo inserire?
Grazie per la pazienza
Si scusami, pensavo che riuscissi a cambiare da solo i dati....colpa mia che nn ci ho pensato prima sorry :cry:
Questo è un brandello di codice del mio programma ed effettivamente i parametri che servivano andavo a prenderli da un file INI dove ci sono memorizzate le opzioni del programma.
'creo il file da mettere sul FTP
nFreeFile = FreeFile
Open App.Path & "\ciccio.txt" & For Output As #nFreeFile
Print #nFreeFile, qui metti il contenuto del file
Close #nFreeFile
sDirRemote = "/" & 'cartella dell'ftp (es: ublteam.com/prova)
sFileRemote = "ciccio.txt"
sFileLocal = App.Path & "\ciccio.txt"
Call rcd(LeggiPreferences("DATI FTP", "Host"), sDirRemote, lConnection)
'mando il file all'FTP
DoEvents
bSendFileFTP = FtpPutFile(lConnection, sFileLocal, sFileRemote, FTP_TRANSFER_TYPE_BINARY, 0)
'elimino il file
Call Kill(sFileLocal)
PS: se nn te li avevo già mandati ecco le costanti
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_INVALID_PORT_NUMBER = 0
Private Const INTERNET_SERVICE_FTP = 1
Private Const INTERNET_FLAG_PASSIVE = &H8000000
Private Const FTP_TRANSFER_TYPE_BINARY = &H2
Le cost devo metterle nelle dichiarazioni vero?
Il mio prob è che ora, non so come, tutte le variabile che avevo messo mi diventato nn definite!
Che palle però...
Sono proprio un zuccone, però non ci riesco.
Potresti farmi un favore? Mi mandi per mail un file VB dove ci sia un pulsante che faccia mandare al sito:
"ftp.utenti.lycos.it"
nella cartella "prova/"
con account "Arturo"
con password "Antonio"
il file già esistente "c:\ciccio.txt" ???
Lo so che è una grande richiesta, ma io ci provo ;)
Grazie cmq, ciao
Ti ho mandato una mail...spostiamoci li a parlare! a dopo
Ora tutto funziona, però ho un problema:
la connessione viene aperta ma non viene chiusa, cioè non fa il log out, quindi se devo inviare 2 file a breve dist di tempo non funzia perchè l'FTP è occupato da l'altro client.
Come faccio a fare il log out?
Grazie, ciao
Scusami tanto!! :(
Purtroppo mi ero dimenticato che io la chiusura nn c'è l'ho in quella routine :(
Riparo subito all'errore
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
E devi mettere la funzione:
Call InternetCloseHandle(lConnection)
Sorry ancora
E devo metterla alla fine della funzione SendFileFTP? Giusto?
Grazie, ciao...
PS non devi scusarti, anzi, sei il mio salvatore!!!
maxithron
16-01-2004, 22:58
Originariamente inviato da beog
PS non devi scusarti, anzi, sei il mio salvatore!!!
Non vedo l'ora che anche matpez prepari un suo tutorial per Visual Basic!!
Originariamente inviato da maxithron
Non vedo l'ora che anche matpez prepari un suo tutorial per Visual Basic!!
Aime...purtroppo il tempo per me nn è così tanto da stare ore a scrivere qlc...e se lo facessimo assieme così ci lavoriamo entrambi e in metà tempo lo mettiamo up?
Bho...sei convinto? :)
Fammi sapere... al massimo concordiamo via email! :p
maxithron
16-01-2004, 23:17
Originariamente inviato da matpez
Aime...purtroppo il tempo per me nn è così tanto da stare ore a scrivere qlc...e se lo facessimo assieme così ci lavoriamo entrambi e in metà tempo lo mettiamo up?
Bho...sei convinto? :)
Fammi sapere... al massimo concordiamo via email! :p
Ma io di VB so solo qualche cosina. Ogni tanto riprendo un pò lo studio ma davvero sono a livelli minimi. :(
Originariamente inviato da maxithron
Ma io di VB so solo qualche cosina. Ogni tanto riprendo un pò lo studio ma davvero sono a livelli minimi. :(
Vorrà dire che metteremo prima il mio nome e poi il tuo :oink: :p :oink:
Originariamente inviato da maxithron
Ma io di VB so solo qualche cosina. Ogni tanto riprendo un pò lo studio ma davvero sono a livelli minimi. :(
Novità sulla mia proposta :confused:
maxithron
17-01-2004, 17:38
Originariamente inviato da matpez
Novità sulla mia proposta :confused:
Ma dai..... davvero non ne sono all'altezza per Visual Basic. :(
E' un linguaggio che ho lasciato da troppo tempo ed anche quando ci "stavo dentro" non ero una cima. :p
Potrei solo magari sviluppare la parte iniziale ed arrivare fino a....mmmhhh.... diciamo una panoramica della struttura "if...then".
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.