ciao a tutti, spero di essere nella sezione giusta..ho letto l'interessante articolo sul client ftp presente sul sito.
le mie esigenze sono un po' diverse però e quindi espongo il mio problema.
ho creato un progetto con VS2005 di tipo console perchè necessito che il programma possa essere schedulato e non necessito dell'intervento di alcun utente (si troverà poi in un server). devo semplicemente leggere dei dati da un file (nel mio esempio l'indirizzo ftp a cui connettermi, il nome utente, la password e il nome(o i nomi) del file da scaricare.
dopo utilizzo la funzione download presente nel tutorial del client ftp.
Il mio problema principale è che scarica il file (o almeno lo costruisce in locale) però questo file è vuoto.
la mia necessità è di scaricare file non di testo (per ora sto provando con un .jpg) bensì file zip o rar.
allego il codice della mia semplice applicazione (da notare che le stringhe dal file di testo vengono lette nel modo giusto)
(tra l'altro viene lanciata un eccezione alla riga:
_FtpResponse = (FtpWebResponse)_FtpRequest.GetResponse();
)
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Collections;
namespace ftptransfer
{
class Program
{
#region "campi dati privati"
private string HOST;
private string USER;
private string PWD;
private string FILE;
private FtpWebRequest _FtpRequest;
private FtpWebResponse _FtpResponse;
#endregion
#region "metodi pubblici"
public void DownloadFile(string Path, string LocalPath, string Name)
{
string _fileName = LocalPath + "\\" + Name;
FileInfo _File = new FileInfo(_fileName);
FileStream _FileStream;
_FtpRequest = (FtpWebRequest)WebRequest.Create("ftp://" + HOST + "//" + FILE);
_FtpRequest.Credentials = new NetworkCredential(USER, PWD);
_FtpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
_FtpRequest.EnableSsl = false;
_FileStream = new FileStream(_File.FullName, FileMode.Create, FileAccess.Write);
_FtpResponse = (FtpWebResponse)_FtpRequest.GetResponse();
Stream _ResponseStream = _FtpResponse.GetResponseStream();
byte[] buffer = new byte[1024];
int bytesRead = _ResponseStream.Read(buffer, 0, 1024);
while (bytesRead != 0)
{
_FileStream.Write(buffer, 0, bytesRead);
bytesRead = _ResponseStream.Read(buffer, 0, 1024);
}
_FileStream.Close();
_ResponseStream.Close();
}
#endregion
#region "Main"
static void Main(string[] args)
{
Program p = new Program();
string Nfile = "D:\\stage\\ftp.txt";//args[0];
StreamReader sr = File.OpenText(@Nfile);
FileInfo fi = new FileInfo(@"D:\\stage\\ftp.txt");
sr=fi.OpenText();
p.HOST = sr.ReadLine();
System.Console.WriteLine(p.HOST);
p.USER = sr.ReadLine();
System.Console.WriteLine(p.USER);
p.PWD = sr.ReadLine();
System.Console.WriteLine(p.PWD);
p.FILE = sr.ReadLine();
System.Console.WriteLine(p.FILE);
sr.Close();
p.DownloadFile(" ", "C:\\" , "10.jpg");
}
#endregion
}
}
ieri mi era venuto in mente di utilizzare uno script bat cosi costruito
@ECHO OFF
echo open ftp.mydomain.it >> D:\Backup\script.txt
echo user>> D:\Backup\script.txt
echo password>> D:\Backup\script.txt
echo binary>>D:\Backup\script.txt
echo lcd D:\Backup>> D:\Backup\script.txt
echo prompt>> D:\Backup\script.txt
echo mget nome_file>> D:\Backup\script.txt
echo bye>> D:\Backup\script.txt
echo ftp -s:D:\Backup\ftp.bat>> D:\Backup\script.txt
C:\WINDOWS\system32\ftp.exe -s:D:\Backup\script.txt
del D:\Backup\script.txt
exit
e questo funziona ma volevo almeno integrarlo e farlo avviare da c# in modo da avere un applicazione un po più seria e che possa essere eventualmente utilizzata dall'azienda per cui faccio lo stage.
ho cercato ovunque ma non son riuscito a trovare nulla per quanto riguarda l'esecuzione di file .bat da un applicazione c#
grazie mille a chi mi sa rispondere!!!
edit
ho quasi risolto..cioè sembra funzionare con la prima soluzione..qualcuno saprebbe illuminarmi con la seconda?