Click here to Skip to main content
15,921,577 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi.
excuse me for my english
i have a problem in VS.net 2008.

i want download a file from a ftp server but downloaded file is not utf8 and farsi word dont show correctly. how can download it?
Posted
Comments
Sergey Alexandrovich Kryukov 14-May-12 12:28pm    
Programmatically, or using existing FTP client?
--SA
BlackQueen62 18-May-12 9:36am    
i Download a MySql Dump File from a ftp server but downloaded file isnot same as source file on the server! understand me? downloaded mysql dump files arabic charecrer not show correctly! do you uonderstand me?and i think if i can download it byte to byte by binary downloading problem is going to solve! excuse me for my weak English.i hope U understand My problem.

If you use available and standard FTP client, the required command to set the binary mode is binary:
http://www.cs.colostate.edu/helpdocs/ftp.html[^].

If you do FTP client-side operations using .NET, most likely you use System.Net.FtpWebRequest, then you need to use the property System.Net.FtpWebRequest.UseBinary:
http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.usebinary.aspx[^].

In practice, I would advise to use binary mode in all cases.

Also, are you sure it's not UTF-8 already? If could be, say, UTF-8 without BOM, it could use some other UTF in first place, etc. You can try to read the text using different encodings and write using the encoding you need and with BOM.

Please see:
http://en.wikipedia.org/wiki/Byte_order_mark[^],
http://unicode.org/faq/utf_bom.html[^].

One quick way of checking up the encoding is using some Web browser. Browsers usually have something like View -< Character Encoding options which would allow you to try them, with a plain text file or HTML.

—SA
 
Share this answer
 
v3
UTF8 is a text encoding. If you're downloading binary files, why are you even specifying an encoding?? You don't need it.
 
Share this answer
 
if UseBinary = true can Download Binary file with less changes in donwnload process like this:


private void GetFile(String strPAth,String strUN,String strPass,String strSavePath)
{
try
{
FtpWebRequest equest=FtpWebRequest)FtpWebRequest.Create(strPAth);
Request.Credentials = new NetworkCredential(strUN, strPass);
Request.KeepAlive = false;
Request.UseBinary = true;
Request.Method = WebRequestMethods.Ftp.DownloadFile;
FtpWebResponse Resp = (FtpWebResponse)Request.GetResponse();
Stream RS= Resp.GetResponseStream();
FileStream FS = new FileStream(strSavePath, FileMode.Create);
Byte[] buf = new Byte[2047];
Int32 Read=0;
do
{
Read = RS.Read(buf, 0, buf.Length);
FS.Write(buf, 0, Read);
} while (Read != 0);
RS.Close();
FS.Flush();
FS.Close();
Resp.Close();
Request.Abort();
}
catch
{

}
}
 
Share this answer
 
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
///
/// FtpUpDown 的摘要说明
///

public class FtpUpDown
{
public FtpUpDown()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
string ftpServerIP;
string ftpUserID;
string ftpPassword;
FtpWebRequest reqFTP;
#region //连接ftp
private void Connect(String path)//连接ftp
{
// 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
// 指定数据传输类型
reqFTP.UseBinary = true;
// ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
}
#endregion
#region//赋值
public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
{
this.ftpServerIP = ftpServerIP;
this.ftpUserID = ftpUserID;
this.ftpPassword = ftpPassword;
}
#endregion
//都调用这个
private string[] GetFileList(string path, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
try
{
Connect(path);
reqFTP.Method = WRMethods;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("/n");
line = reader.ReadLine();
}
// to remove the trailing '/n'
result.Remove(result.ToString().LastIndexOf('/n'), 1);
reader.Close();
response.Close();
return result.ToString().Split('/n');
}
catch (Exception ex)
{

downloadFiles = null;
return downloadFiles;
}
}
public string[] GetFileList(string path)//上面的代码示例了如何从ftp服务器上获得文件列表
{
return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);
}
public string[] GetFileList()//上面的代码示例了如何从ftp服务器上获得文件列表
{
return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);
}
public void Upload(string filename) //上面的代码实现了从ftp服务器上载文件的功能
{
FileInfo fileInf = new FileInfo(filename);
// string uri = "ftp://" + ftpServerIP + "/bjoil_qt/Uploads/" + fileInf.Name;
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
Connect(uri);//连接
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
// 缓冲大小设置为kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
// 打开一个文件流(System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
try
{
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream();
// 每次读文件流的kb
contentLen = fs.Read(buff, 0, buffLength);
// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入upload stream
strm.Write(buff, 0, contentLen);
contentLen = fs.Read(buff, 0, buffLength);
}
// 关闭两个流
strm.Close();
fs.Close();
}
catch (Exception ex)
{

}
}
public bool Download(string filePath, string fileName, out string errorinfo)////上面的代码实现了从ftp服务器下载文件的功能
{
try
{
String onlyFileName = Path.GetFileName(fileName);
string newFileName = filePath + "//" + onlyFileName;
if (File.Exists(newFileName))
{
errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
return false;
}
string url = "ftp://" + ftpServerIP + "/" + fileName;
Connect(url);//连接
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = 2048;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, 0, bufferSize);
FileStream outputStream = new FileStream(newFileName, FileMode.Create);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();
response.Close();
errorinfo = "";
return true;
}
catch (Exception ex)
{
errorinfo = string.Format("因{0},无法下载", ex.Message);
return false;
}
}
//删除文件
public void DeleteFileName(string fileName)
{
try
{
FileInfo fileInf = new FileInfo(fileName);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
Connect(uri);//连接
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false;
// 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch (Exception ex)
{

}
}
//创建目录
public void MakeDir(string dirName)
{
try
{
string uri = "ftp://" + ftpServerIP + "/" + dirName;
Connect(uri);//连接
reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch (Exception ex)
{

}
}
//删除目录
public void delDir(string dirName)
{
try
{
string uri = "ftp://" + ftpServerIP + "/" + dirName;
Connect(uri);//连接
reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
response.Close();
}
catch (Exception ex)
{

}
}
//获得文件大小
public long GetFileSize(string filename)
{

long fileSize = 0;
try
{
FileInfo fileInf = new FileInfo(filename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
Connect(uri);//连接
reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
fileSize = response.ContentLength;
response.Close();
}
catch (Exception ex)
{

}
return fileSize;
}
//文件改名
public void Rename(string currentFilename, string newFilename)
{
try
{
FileInfo fileInf = new FileInfo(currentFilename);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
Connect(uri);//连接
reqFTP.Method = WebRequestMethods.Ftp.Rename;
reqFTP.RenameTo = newFilename;

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
//Stream ftpStream = response.GetResponseStream();
//ftpStream.Close();
response.Close();
}
catch (Exception ex)
{

}
}
//获得文件明晰
public string[] GetFilesDetailList()
{
return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
}
//获得文件明晰
public string[] GetFilesDetailList(string path)
{
return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
}
}

//页面调用

protected void Button1_Click(object sender, EventArgs e)
{
string ftpServerIP = "10.177.*.*";
string ftpUserID = "hh";
string ftpPassword = "";
FtpUpDown ftpUpDown = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
string url = Server.MapPath("uploads/title4.gif");
ftpUpDown.Upload(url);



}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900