C# FTP 작업 클래스

30215 단어 ftp
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(filname);
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) { Log.WriteError( "Upload Error:"+ ex.Message); }
}
public bool Download(string filePath,string fileName,out string errorinfo)/////에 있는 코드는 ftp 서버에서 파일을 다운로드하는 기능을 수행합니다.
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 current Filename, string new Filename)는 {try {File file Inf = new FileInfo(currentFilename), string uri ='ftp:/'+ ftpServServIP+'/'+ fileInf.Name;Connect(ur);;/연결 reqFTP.Method = WeqFTP.Meththththd=WerefififileInInInfififififififififififififififififififififififififififififine;;;;;;;/////////연결연결연결requreqFFFFFFFnse)reqFTP.GetResponse(); response.Close();
}
catch(Exception ex) {Log.WriteError(파일 이름 변경 오류: + ex.Message);
}//파일 읽기
퍼블릭 Stream ReadFile(string file Name) {try {string url ='ftp:/'+ ftpServerIP+'/'+ fileName; 커넥트(url),//연결 리qFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword), FtpWebResponse respponse =(FtpWWWWebResponnese reqFTPP.Credentials = 새 FFTPP.CretReReReReReRespponsetReReReRespponse:::RetPP.RetReReReponsetReReponsem n 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 recist(string fices = false, FtpWeb Res filesponse response rese reser reader reader reader = null; try {string url ='ftp://'+ ftpSerververIP +'/'/'+'/''/'+'/'+'/'+ fileNameName; Connenenect(urName;Connect(ur),//연결 연결 reqFFFFFFFTFTPFT.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 로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         }

파일과 디렉터리를 가져오는 방법을 알면, 나머지는 귀속일 뿐이다.이것은 매우 간단해서 설명하지 않겠다.귀환은 재미있지만 효율이 낮다.
FTP 로그인
|원두:358
Ron Ngai
|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;
        }

좋은 웹페이지 즐겨찾기