日期:2014-05-17  浏览次数:21066 次

C# winform程序 怎么向ftp文件服务器上传文件?? 在线等。。。
C# winform程序 怎么向ftp文件服务器上传文件? 
我用的方法:System.IO.File.Move(sourcepath, @"ftp:\\177.19.1.8\kaikake\TEST\" + filename); 
(比如ftp:\\177.19.1.8\kaikake\TEST\是一文件服务器地址) 
但是 提示错误信息: 不支持这种路径格式 应该怎么写?? 请高人指教!! 谢谢了 
还需要在程序中设置登陆名和密码吗? 如果需要,应该怎么设置?

------解决方案--------------------
在.net 2.0 中添加了对许多ftp的支持,使用ftp变得非常简单了。

首先,WebClient支以已经开始支持ftp协议了。

比如说要从远程服务器上下载文件,只要使用两条命令就可以完成。

WebClient webClient = new WebClient();

webClient.DownloadFile("ftp://username:password@192.168.1.1/123.txt", @"f:\123.txt");

上传文件到远程服务器也是一样简单。

WebClient webClient = new WebClient();

webClient.UploadFile("ftp://username:password@192.168.1.1/456.txt", @"f:\123.txt");
------解决方案--------------------
//ftp方式上传
public static int UploadFtp(string filePath, string filename, string ftpServerIP, string ftpUserID, string ftpPassword)
{

FileInfo fileInf = new FileInfo(filePath + "\\" + filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP;


// Create FtpWebRequest object from the Uri provided
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
try
{

// Provide the WebPermission Credintials
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

// By default KeepAlive is true, where the control connection is not closed
// after a command is executed.
reqFTP.KeepAlive = false;

// Specify the command to be executed.
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// Specify the data transfer type.
reqFTP.UseBinary = true;

// Notify the server about the size of the uploaded file
reqFTP.ContentLength = fileInf.Length;

// The buffer size is set to 2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;

// Opens a file stream (System.IO.FileStream) to read the file to be uploaded
//FileStream fs = fileInf.OpenRead();
FileStream fs = fileInf.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);


// Stream to which the file to be upload is written
Stream strm = reqFTP.GetRequestStream();

// Read from the file stream 2kb at a time
contentLen = fs.Read(buff, 0, buffLength);

// Till Stream content ends
while (contentLen != 0)
{
// Write Content from the file stream to the FTP Upload Stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}

// Close the file stream and the Request Stream
strm.Close();
fs.Close();
return 0;
}
catch (Exception ex)
{
reqFTP.Abort();
Logging.WriteError(ex.Message + ex.StackTrace);
return -2;
}