Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Non sostituire file txt caricato nel ftp ?
Forum - C# / VB.NET - Non sostituire file txt caricato nel ftp ?

Avatar
MarcoDL4 (Normal User)
Newbie


Messaggi: 4
Iscritto: 01/01/2014

Segnala al moderatore
Postato alle 22:42
Mercoledì, 01/01/2014
Salve ragazzi , visto che il mio programma crea un documento e lo salva in c:\ e poi lo spedisce nel ftp con formato txt , nella prossima apertura , anche su un diverso computer , come posso fare in maniera che il file caricato txt sul ftp  non venga rimosso , ma semplicemente modificato mantenendo il stesso contenuto precedente ? insomma voglio fare in modo che il programma quando carica il file txt NON RIMUOVE le vecchie stringhe , non rimuove nulla , ma semplicemente che aggiunge le stringhe mantenendo quelle vecchie , spero che sono stato chiaro ,

il mio attuale codice , che nonostante funziona, se carica il file da un altro pc me lo sostituisce in maniera completa , quindi perdo le stringhe del vecchio txt .. come risolvo ?

Codice sorgente - presumibilmente VB.NET

  1. RichTextBox1.SaveFile("C:\DATABASEGAME.dat", RichTextBoxStreamType.PlainText)
  2.  
  3.         Dim clsRequest As System.Net.FtpWebRequest = _
  4. DirectCast(System.Net.WebRequest.Create("ftp://www.sito.altervista.org/datidownloadgames.txt"), System.Net.FtpWebRequest)
  5.         clsRequest.Credentials = New System.Net.NetworkCredential("username", "psw")
  6.         clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
  7.         Dim clsStream As System.IO.Stream = _
  8.         clsRequest.GetRequestStream()
  9.         clsStream.Write(System.IO.File.ReadAllBytes("C:\DATABASEGAME.txt"), 0, System.IO.File.ReadAllBytes("C:\DATABASEGAME.txt").Length)


Ultima modifica effettuata da MarcoDL4 il 01/01/2014 alle 23:44
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 22:59
Mercoledì, 01/01/2014
Potresti scaricarlo, modificarlo salvandolo in modalità append e poi ri-upparlo.


PM Quote
Avatar
MarcoDL4 (Normal User)
Newbie


Messaggi: 4
Iscritto: 01/01/2014

Segnala al moderatore
Postato alle 23:42
Mercoledì, 01/01/2014
Purtroppo non sono molto esperto , sono impazzito per creare questo codice , poi grazie youtube ci sono riuscito , sicuramente è una piccola modifica , non è che mi potresti scrivere come si fa ?
ti ringrazio mille

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 14:00
Giovedì, 02/01/2014
Prima del codice cha hai scritto, fai il download del file dal server ftp (c'è pieno di esempi in rete, https://www.google.it/search?q=vb.net+ftp+download) e lo salvi in C:\DATABASEGAME.dat; poi, invece di salvare con il metodo della richtextbox, utilizza
Codice sorgente - presumibilmente Plain Text

  1. My.Computer.FileSystem.WriteAllText("C:\DATABASEGAME.dat", RichTextBox1.Text, True)


(come puoi vedere qui http://msdn.microsoft.com/it-it/library/ms128035(v=vs.110) ..., l'ultimo parametro serve proprio a specificare di accodare il testo al contenuto del file invece che sovrascriverlo).


PM Quote
Avatar
MarcoDL4 (Normal User)
Newbie


Messaggi: 4
Iscritto: 01/01/2014

Segnala al moderatore
Postato alle 15:41
Giovedì, 02/01/2014
perfetto , credo che funzioni ...
ma mi dice che il file DATABASEGAME.dat è utilizzato da un altro processo (sicuramente , mentre il file lo scarica non fa in tempo a modificarlo che ancora sta scaricando il file)
come risolvo ?
codice per il download che ho aggiunto
Codice sorgente - presumibilmente VB.NET

  1. download.DownloadFileAsync(New Uri("https://www.sito.altervista.org/DATABASEGAME.dat"), "C:\DATABASEGAME.dat")
  2.  
  3. 'inzio codice che aggiunge testo della richtextbox1
  4.         My.Computer.FileSystem.WriteAllText("C:\DATABASEGAME.dat", RichTextBox1.Text, True)
  5.  
  6.  
  7.         Dim clsRequest As System.Net.FtpWebRequest = _
  8.     DirectCast(System.Net.WebRequest.Create("ftp://www.sito.altervista.org/DATABASEGAMES.txt"), System.Net.FtpWebRequest)
  9.         clsRequest.Credentials = New System.Net.NetworkCredential("sito", "psw")
  10.         clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
  11.         Dim clsStream As System.IO.Stream = _
  12.         clsRequest.GetRequestStream()
  13.         clsStream.Write(System.IO.File.ReadAllBytes("C:\DATABASEGAME.dat"), 0, System.IO.File.ReadAllBytes("C:\DATABASEGAME.dat").Length)




ERRORE ;

Codice sorgente - presumibilmente C# / VB.NET

  1. System.IO.IOException: Il processo non può accedere al file 'C:\DATABASEGAME.dat' perché è in uso da un altro processo.


Ultima modifica effettuata da MarcoDL4 il 02/01/2014 alle 18:08
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 19:14
Giovedì, 02/01/2014
Esatto, l'errore si verifica perchè tenta di scrivere mentre sta ancora scaricando: questo perchè hai usato DownloadFileAsync, che è asincrono, cioè non bloccante, poichè (credo) esegue l'operazione su un thread separato. Hai due opzioni: la più semplice è utilizzare DownloadFile (non Async), in modo che il programma aspetterà la fine del download prima di proseguire (tieni presente, però, che durante il download l'interfaccia rimarrà bloccata; usa questo metodo solo se il file non è tanto grande); in alternativa, lascia quello asincrono, ma dichiara il WebClient come variabile globale WithEvents e sposta il codice che salva il file e fa l'upload nel gestore dell'evento di download completato (non mi ricordo come si chiama ma lo trovi nella documemtaziine su MSDN)


PM Quote
Avatar
MarcoDL4 (Normal User)
Newbie


Messaggi: 4
Iscritto: 01/01/2014

Segnala al moderatore
Postato alle 20:57
Venerdì, 03/01/2014
ho semplicemente risolto con
Codice sorgente - presumibilmente Plain Text

  1. WebRequestMethods.Ftp.AppendFile


PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 12:22
Sabato, 04/01/2014
Testo quotato

Postato originariamente da MarcoDL4:

ho semplicemente risolto con
Codice sorgente - presumibilmente Plain Text

  1. WebRequestMethods.Ftp.AppendFile



Ah asd ti stavo complicando inutilmente la vita scusami :asd:
Non sapevo che si potesse scrivere in modalità append direttamemte nei file su un server ftp


PM Quote