我需要将FTP上的文件从一台服务器传输到另一台服务器。我使用了以下代码。
在许多文件中,这只是部分传输一个文件。对于前者我有一个56KB的源文件。运行以下代码后,源文件减少到0kb并将0KB文件传输到目标而不是56 KB文件大小。
我构建了代码以将所有文件从源传输到目标。但是,如上所述,在传输单个0KB文件后,它没有进一步发展。
请帮帮我。
static void Main(string[] args)
{
string DISCH_DEST = System.Configuration.ConfigurationManager.AppSettings["DISCH_DEST"]; //Contains the source folder in source server
string FTP_DISCH = System.Configuration.ConfigurationManager.AppSettings["FTP_DISCH"]; // FTP path (ftp://***********/)
string USERNAME = System.Configuration.ConfigurationManager.AppSettings["USERNAME"];
string PASSWORD = System.Configuration.ConfigurationManager.AppSettings["PASSWORD"];
DirectoryInfo DISCH_Directory = new DirectoryInfo(DISCH_DEST);
FileInfo[] DISCH_Files = DISCH_Directory.GetFiles("*.*");
foreach (var f in DISCH_Files) //FETCHING FILES FROM THE BULK FOLDER (IN)
{
string FN = Path.GetFileName(f.FullName);
int bufferSize = 1024;
FtpWebRequest REQ = (FtpWebRequest)WebRequest.Create(new Uri(String.Format("{0}/{1}",FTP_DISCH,FN)));
REQ.Credentials = new NetworkCredential(USERNAME, PASSWORD);
REQ.Method = WebRequestMethods.Ftp.UploadFile;
Stream FTP_Stream = REQ.GetRequestStream();
FileStream LOCAL_FileStream = new FileStream(f.FullName, FileMode.Create);
byte[] bytebuffer = new byte[bufferSize];
int bytesSent = FTP_Stream.Read(bytebuffer, 0, bufferSize);
try
{
while (bytesSent != 0)
{
LOCAL_FileStream.Write(bytebuffer, 0, bytesSent);
bytesSent = FTP_Stream.Read(bytebuffer, 0, bytesSent);
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
LOCAL_FileStream.Close();
FTP_Stream.Close();
REQ = null;
}
}
在许多文件中,这只是部分传输一个文件。对于前者我有一个56KB的源文件。运行以下代码后,源文件减少到0kb并将0KB文件传输到目标而不是56 KB文件大小。
我构建了代码以将所有文件从源传输到目标。但是,如上所述,在传输单个0KB文件后,它没有进一步发展。
请帮帮我。
答案 0 :(得分:1)
现在我不明白为什么你的代码会发送任何文件。
您的代码:
Stream FTP_Stream = REQ.GetRequestStream();
FileStream LOCAL_FileStream = new FileStream(f.FullName, FileMode.Create);
byte[] bytebuffer = new byte[bufferSize];
int bytesSent = FTP_Stream.Read(bytebuffer, 0, bufferSize);
你正在创建一个新的流,然后从ftp服务器读取它...
如果您要发送文件,则不会是FileMode.Create,因为它会创建一个新文件,但FileMode.Open。
你肯定会从LOCAL_FileStream中读取并写入FTP_STream ....