C#FTP操作類
30212 ワード
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO;
namespace Utility { public class FtpUpDown {
string ftpServerIP;
string ftpUserID;
string ftpPassword;
FtpWebRequest reqFTP;
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);
}
public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword) { this.ftpServerIP = ftpServerIP;
this.ftpUserID = ftpUserID;
this.ftpPassword = ftpPassword; }
//これを呼び出す
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("");
line = reader.ReadLine();
}
//to remove the trailing ''
result.Remove(result.ToString().LastIndexOf(''), 1);
reader.Close();
response.Close();
return result.ToString().Split('');
}
catch (Exception ex) { Log.WriteError("Get FileList Error:"+ ex.Message); 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 + "/"+ 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);
}
//2つのストリームを閉じる
strm.Close();
fs.Close();
}
catch (Exception ex) { Log.WriteError( "Upload Error:"+ ex.Message); }
}
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){Log.WriteError(「削除エラー:」+ex.Message);}
}
//ディレクトリの作成
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){Log.WriteError(「ディレクトリの作成エラー:」+ex.Message);}
}
//ディレクトリの削除
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){Log.WriteError(「ディレクトリ削除エラー:」+ex.Message);}
}
//ファイルサイズの取得
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){Log.WriteError(「ファイルサイズの取得エラー:」+ex.Message);}
return fileSize;
}
//ファイル改名
public void Rename(string currentFilenname,string newFilenname){try{FileInfo fileInfo=new FileInfo(currentFilenname);string uri="ftp://"+ftpServerIP+"/"+fileInfo.Name;Connect(uri);//接続reqFTP.Method=WebRequestMethods.Ftp.Rename;reqFTP.RenameTo=newFilenname;FtttWebWebResponse respopoponse respopopopoponse resname;FtpWebWebResponse nse=(FtpWebResponse)reqFTP.GetResponse();response.Close();
}
catch(Exception ex){Log.WriteError("ファイル改名エラー:"+ex.Message);}
}//ファイルの読み込み
public Stream ReadFile(string file Name){try{string url="ftp://"+ftpServerIP+"/"+fileName;接続(url);//接続reqFTP.Credentials=new NetworkCredential(ftpUserID,ftpPassword);FtpWebResponse response=(FtpWebResponse)reqFTP.GetResponse();Stream ftpStream=response.GetResponse.GetResponse();Stream ftpStream=response.GetResResResponse.GetResponse();return ftpStream;}
catch(Exception ex){Log.WriteError(「ファイル読み込みエラー:」+ex.Message);return null;}
}
//ファイルの鮮明化
public string[] GetFilesDetailList() {
return GetFileList("ftp://"+ ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
}
//ファイルの鮮明化
public string[] GetFilesDetailList(string path) {
return GetFileList("ftp://"+ ftpServerIP + "/"+ path, WebRequestMethods.Ftp.ListDirectoryDetails);
}
//ファイル存在チェックpublic bool fileCheckExist(string file Name){bool success=false;FtpWebResponse response=null;StreamReader=null;try{string url="ftp://"+ftpServerIP+"/"+fileName;Connect(url);//////////接続reqFTP.Creentials=new NetworkCreential(ftpUseID、ftpPassword);response=(FtpWebResponse);//(FtpWebResponse);//(FtpWebResponse));//ファイル存在チェックreqFTP.GetResponse();reader=new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); if (line != null) { success = true; } } catch (Exception) { success = false; } finally { if (reader != null) { reader.Close(); }
if (response != null) { response.Close(); } } return success; } }}
匿名FTP登録
ftp_でconnect,ftp_login匿名でFTPにログインした場合、ユーザー名:anonymousパスワード:空
FTPファイルパスとサブディレクトリパスの取得
ファイルとディレクトリの取得方法を知っていて、残りは再帰です.これは簡単ですから、説明しません.再帰的には面白いですが、効率が低いです.
Ron Ngai
|園豆:358
(菜鳥二級)
|2012-07-25 18:28
namespace Utility { public class FtpUpDown {
string ftpServerIP;
string ftpUserID;
string ftpPassword;
FtpWebRequest reqFTP;
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);
}
public FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword) { this.ftpServerIP = ftpServerIP;
this.ftpUserID = ftpUserID;
this.ftpPassword = ftpPassword; }
//これを呼び出す
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("");
line = reader.ReadLine();
}
//to remove the trailing ''
result.Remove(result.ToString().LastIndexOf(''), 1);
reader.Close();
response.Close();
return result.ToString().Split('');
}
catch (Exception ex) { Log.WriteError("Get FileList Error:"+ ex.Message); 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 + "/"+ 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);
}
//2つのストリームを閉じる
strm.Close();
fs.Close();
}
catch (Exception ex) { Log.WriteError( "Upload Error:"+ ex.Message); }
}
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){Log.WriteError(「削除エラー:」+ex.Message);}
}
//ディレクトリの作成
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){Log.WriteError(「ディレクトリの作成エラー:」+ex.Message);}
}
//ディレクトリの削除
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){Log.WriteError(「ディレクトリ削除エラー:」+ex.Message);}
}
//ファイルサイズの取得
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){Log.WriteError(「ファイルサイズの取得エラー:」+ex.Message);}
return fileSize;
}
//ファイル改名
public void Rename(string currentFilenname,string newFilenname){try{FileInfo fileInfo=new FileInfo(currentFilenname);string uri="ftp://"+ftpServerIP+"/"+fileInfo.Name;Connect(uri);//接続reqFTP.Method=WebRequestMethods.Ftp.Rename;reqFTP.RenameTo=newFilenname;FtttWebWebResponse respopoponse respopopopoponse resname;FtpWebWebResponse nse=(FtpWebResponse)reqFTP.GetResponse();response.Close();
}
catch(Exception ex){Log.WriteError("ファイル改名エラー:"+ex.Message);}
}//ファイルの読み込み
public Stream ReadFile(string file Name){try{string url="ftp://"+ftpServerIP+"/"+fileName;接続(url);//接続reqFTP.Credentials=new NetworkCredential(ftpUserID,ftpPassword);FtpWebResponse response=(FtpWebResponse)reqFTP.GetResponse();Stream ftpStream=response.GetResponse.GetResponse();Stream ftpStream=response.GetResResResponse.GetResponse();return ftpStream;}
catch(Exception ex){Log.WriteError(「ファイル読み込みエラー:」+ex.Message);return null;}
}
//ファイルの鮮明化
public string[] GetFilesDetailList() {
return GetFileList("ftp://"+ ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
}
//ファイルの鮮明化
public string[] GetFilesDetailList(string path) {
return GetFileList("ftp://"+ ftpServerIP + "/"+ path, WebRequestMethods.Ftp.ListDirectoryDetails);
}
//ファイル存在チェックpublic bool fileCheckExist(string file Name){bool success=false;FtpWebResponse response=null;StreamReader=null;try{string url="ftp://"+ftpServerIP+"/"+fileName;Connect(url);//////////接続reqFTP.Creentials=new NetworkCreential(ftpUseID、ftpPassword);response=(FtpWebResponse);//(FtpWebResponse);//(FtpWebResponse));//ファイル存在チェックreqFTP.GetResponse();reader=new StreamReader(response.GetResponseStream()); string line = reader.ReadLine(); if (line != null) { success = true; } } catch (Exception) { success = false; } finally { if (reader != null) { reader.Close(); }
if (response != null) { response.Close(); } } return success; } }}
匿名FTP登録
ftp_でconnect,ftp_login匿名でFTPにログインした場合、ユーザー名:anonymousパスワード:空
FTPファイルパスとサブディレクトリパスの取得
1 /// <summary>
2 /// ftp
3 /// </summary>
4 /// <param name="RequedstPath"></param>
5 /// <returns></returns>
6 public static List<string> GetDirctory(string RequedstPath)
7 {
8 List<string> strs = new List<string>();
9 try
10 {
11 string uri = path + RequedstPath; // path
12 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
13 // ftp
14 reqFTP.Credentials = new NetworkCredential(username, password);
15 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
16 WebResponse response = reqFTP.GetResponse();
17 StreamReader reader = new StreamReader(response.GetResponseStream());//
18
19 string line = reader.ReadLine();
20 while (line != null)
21 {
22 if (line.Contains("<DIR>"))
23 {
24 string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim();
25 strs.Add(msg);
26 }
27 line = reader.ReadLine();
28 }
29 reader.Close();
30 response.Close();
31 return strs;
32 }
33 catch (Exception ex)
34 {
35 Console.WriteLine(" :" + ex.Message);
36 }
37 return strs;
38 }
39
40 /// <summary>
41 /// ftp
42 /// </summary>
43 /// <param name="RequedstPath"> </param>
44 /// <returns></returns>
45 public static List<string> GetFile(string RequedstPath)
46 {
47 List<string> strs = new List<string>();
48 try
49 {
50 string uri = path + RequedstPath; // path
51 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
52 // ftp
53 reqFTP.Credentials = new NetworkCredential(username, password);
54 reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
55 WebResponse response = reqFTP.GetResponse();
56 StreamReader reader = new StreamReader(response.GetResponseStream());//
57
58 string line = reader.ReadLine();
59 while (line != null)
60 {
61 if (!line.Contains("<DIR>"))
62 {
63 string msg = line.Substring(39).Trim();
64 strs.Add(msg);
65 Console.WriteLine(msg);
66 }
67 line = reader.ReadLine();
68 }
69 reader.Close();
70 response.Close();
71 return strs;
72 }
73 catch (Exception ex)
74 {
75 Console.WriteLine(" :" + ex.Message);
76 }
77 return strs;
78 }
ファイルとディレクトリの取得方法を知っていて、残りは再帰です.これは簡単ですから、説明しません.再帰的には面白いですが、効率が低いです.
Ron Ngai
|園豆:358
(菜鳥二級)
|2012-07-25 18:28
/// <summary>
/// ftp
/// </summary>
/// <param name="RequedstPath"></param>
/// <returns></returns>
public static List<string> GetDirctory(string RequedstPath)
{
List<string> strs = new List<string>();
try
{
string uri = path + RequedstPath; // path
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
// ftp
reqFTP.Credentials = new NetworkCredential(username, password);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());//
string line = reader.ReadLine();
while (line != null)
{
if (line.Contains("<DIR>"))
{
string msg = line.Substring(line.LastIndexOf("<DIR>")+5).Trim();
strs.Add(msg);
}
line = reader.ReadLine();
}
reader.Close();
response.Close();
return strs;
}
catch (Exception ex)
{
Console.WriteLine(" :" + ex.Message);
}
return strs;
}
/// <summary>
/// ftp
/// </summary>
/// <param name="RequedstPath"> </param>
/// <returns></returns>
public static List<string> GetFile(string RequedstPath)
{
List<string> strs = new List<string>();
try
{
string uri = path + RequedstPath; // path
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
// ftp
reqFTP.Credentials = new NetworkCredential(username, password);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
WebResponse response = reqFTP.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());//
string line = reader.ReadLine();
while (line != null)
{
if (!line.Contains("<DIR>"))
{
string msg = line.Substring(39).Trim();
strs.Add(msg);
Console.WriteLine(msg);
}
line = reader.ReadLine();
}
reader.Close();
response.Close();
return strs;
}
catch (Exception ex)
{
Console.WriteLine(" :" + ex.Message);
}
return strs;
}