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ファイルパスとサブディレクトリパスの取得
 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;
        }