[TestMethod]//功能强 public void MyFtpTest1() { var ftp = new FTPConnection(); ftp.ServerAddress = "115.159.186.113"; ftp.ServerPort = 21; ftp.UserName = "******"; ftp.Password = "******"; ftp.CommandEncoding = Encoding.GetEncoding("GBK");//设置编码 //连接 ftp.Connect(); ftp.ConnectMode = FTPConnectMode.PASV; ftp.TransferType = FTPTransferType.BINARY; string[] files = ftp.GetFiles(); FTPFile[] fileDetails = ftp.GetFileInfos(); ////当前目录 string directory = ftp.WorkingDirectory; ////切换目录 进入指定的目录 bool change = ftp.ChangeWorkingDirectory("/tools/测试证书pfx/"); files = ftp.GetFiles(); fileDetails = ftp.GetFileInfos(); ////切换到上级目录 //bool b = ftp.ChangeWorkingDirectoryUp(); ////上传文件 //ftp.UploadFile(localFilePath, remoteFileName); ////上传文件 已存是否覆盖 //ftp.UploadFile(localFilePath, remoteFileName, true); ////下载文件 //ftp.DownloadFile("b2bic-副本.rar", "/tools/b2bic-副本.rar"); //将内存字节数据上传到远程服务器 //ftp.UploadByteArray(bytes, remotFileName); //下载远程文件到本地内存 //byte[] bytes = ftp.DownloadByteArray(remoteFileName); //删除远程文件 //bool dFlag = ftp.DeleteFile(remoteFileName); //内存流上传到远程服务器 //ftp.UploadStream(stream, remoteFileName); //关闭 ftp.Close(); }
private static void DeleteDirectoryRecursively(FTPConnection ftpConnect, string remotePath) { ftpConnect.ChangeWorkingDirectory(remotePath); var files = ftpConnect.GetFileInfos().Where(x => !x.Name.Contains(".") || x.Name.Contains("jpg")); foreach (var tmp in files) { if (!tmp.Dir) { ftpConnect.DeleteFile(tmp.Name); } } // delete all subdirectories in the remotePath directory foreach (var tmp in files) { if (tmp.Dir) { DeleteDirectoryRecursively(ftpConnect, tmp.Name); } } // delete this directory ftpConnect.ChangeWorkingDirectoryUp(); ftpConnect.DeleteDirectory(remotePath); }
/// <summary> /// 获取 FTP 服务器的文件列表的递归方法 /// </summary> /// <param name="path">服务器相对路径</param> /// <param name="files">填充文件名的变量</param> /// <returns></returns> private void GetFiles(string path, IList <FtpFileInfo> files) { if (files == null) { files = new List <FtpFileInfo>(); } m_pFtp.ChangeWorkingDirectory("/" + path.TrimStart('/')); FTPFile[] listItems = m_pFtp.GetFileInfos("/" + path.TrimStart('/')); foreach (FTPFile listItem in listItems) { if (!listItem.Dir) { files.Add(new FtpFileInfo(listItem, path));//(path.TrimEnd('/') + "/").TrimStart('/') + listItem.Name); } else { GetFiles(path.TrimEnd('/') + "/" + listItem.Name, files); } } }
public static FTPFile[] GetFileInfosRecursive(this FTPConnection connection) { var resultList = new List <FTPFile>(); var fileInfos = connection.GetFileInfos(); resultList.AddRange(fileInfos); foreach (var fileInfo in fileInfos) { if (fileInfo.Dir) { connection.ServerDirectory = fileInfo.Path; resultList.AddRange(connection.GetFileInfosRecursive()); } } return(resultList.ToArray()); }
static void Main(string[] args) { using (var connection = new FTPConnection { ServerAddress = "127.0.0.1", UserName = "******", Password = "******", }) { connection.Connect(); connection.ServerDirectory = "/recursive_folder"; var resultRecursive = connection.GetFileInfosRecursive().Where(f => !(f.Name.EndsWith(".old"))).ToList(); var resultDefault = connection.GetFileInfos().Where(f => !(f.Name.EndsWith(".old"))).ToList(); } }
public override IEnumerable <IDirectoryViewItem> GetDirectoryContent(string dirPath) { var content = new List <IDirectoryViewItem>(); if (!IsRootPath(dirPath)) { content.Add(new MoveUpObject()); } var infos = connection.GetFileInfos(dirPath); var ftpFiles = infos.Where(x => x.Name != "." && x.Name != "..").Select(x => FTPFile.CreateFromServerCall(x, dirPath, account.Id)).OrderByDescending(x => x.IsDirectory); content.AddRange(ftpFiles); connection.ChangeWorkingDirectory(dirPath); return(content); }
/// <summary> /// 返回指定目录的文件 /// </summary> /// <param name="dirName"></param> /// <param name="connection"></param> /// <returns></returns> private FTPFile[] GetFileInfos(string dirName, FTPConnection connection) { return(connection.GetFileInfos(dirName)); }
/// <summary> /// 返回当前工作目录的文件 /// </summary> /// <param name="connection"></param> /// <returns></returns> private FTPFile[] GetFileInfos(FTPConnection connection) { return(connection.GetFileInfos()); }
public static void DeleteDirectory(string remotePath) { var ftpConnect = new FTPConnection(); try { ftpConnect.ServerAddress = System.Configuration.ConfigurationManager.AppSettings["HostGoDaddy"].ToString(); ftpConnect.ServerPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PortGoDaddy"].ToString()); ftpConnect.UserName = System.Configuration.ConfigurationManager.AppSettings["UsernameGoDaddy"].ToString(); ftpConnect.Password = System.Configuration.ConfigurationManager.AppSettings["PasswordGoDaddy"].ToString(); ftpConnect.Connect(); //ftpConnect.Login(); //ftpConnect.Timeout = 1200000; ftpConnect.ChangeWorkingDirectory("/public_html/" + remotePath); var files = ftpConnect.GetFileInfos().Where(x => !x.Name.Contains(".")).OrderBy(x => x.LastModified); int index = 0; foreach (var f in files) { var dtLastModified = f.LastModified; int numberofDays = DateTime.Now.Subtract(dtLastModified).Days; if (numberofDays > 15) { index++; } } System.Windows.Forms.MessageBox.Show(index.ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning); //foreach (var tmp in files) //{ // //var dtLastModified = tmp.LastModified; // //int numberofDays = DateTime.Now.Subtract(dtLastModified).Days; // //if (numberofDays > 15) // DeleteDirectoryRecursively(ftpConnect, tmp.Name); // //System.Threading.Thread.Sleep(2000); // break; // ; //} //files = ftpConnect.GetFileInfos().Where(x => !x.Name.Contains(".")).OrderBy(x => x.LastModified); //System.Windows.Forms.MessageBox.Show(files.Count().ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning); } catch (Exception ex) { throw new Exception("Exception is " + ex.Message); } finally { ftpConnect.Close(); //ftpConnect.Dispose(); } }
static void Main(string[] args) { Local_long_listFiles = new List <string>(); Local_Short_listFiles = new List <string>(); string dirName = ConfigurationManager.AppSettings["dirName"]; if (Directory.Exists(dirName)) { Console.WriteLine("Подкаталоги:"); string[] dirs_ = Directory.GetDirectories(dirName); for (int i = 0; i < dirs_.Length; i++) { Local_long_listFiles.Add(dirs_[i]); dirs_[i] = new FileInfo(dirs_[i]).Name; // Выделяем короткое название из пути Local_Short_listFiles.Add(dirs_[i]); Console.WriteLine(Local_long_listFiles[i]); Console.WriteLine(Local_Short_listFiles[i]); /* string[] files = Directory.GetFiles(s); * foreach (string p in files) * { * Console.WriteLine(p); * }*/ } } FTPConnection ftp = new FTPConnection(); ftp.ConnectMode = FTPConnectMode.ACTIVE; ftp.ServerAddress = ConfigurationManager.AppSettings["ServerAddress"]; ftp.UserName = ConfigurationManager.AppSettings["UserName"]; ftp.Password = ConfigurationManager.AppSettings["UserName"]; ftp.Connect(); FTPFile[] filesFTP = ftp.GetFileInfos(); if (filesFTP.Length > 0) { //int a = 0; for (int i = 0; i < Local_Short_listFiles.Count; i++) { //Console.WriteLine(filesFTP[i].Name); for (int k = 0; k < filesFTP.Length; k++) { if (filesFTP[k].Name == Local_Short_listFiles[i]) { break; } if (k == filesFTP.Length - 1) { try { ftp.CreateDirectory(Local_Short_listFiles[i]); main_Long_files = Directory.GetFiles(Local_long_listFiles[i]); main_Short_files = Directory.GetFiles(Local_long_listFiles[i]); for (int s = 0; s < main_Short_files.Length; s++) { main_Short_files[s] = new FileInfo(main_Short_files[s]).Name; ftp.UploadFile(main_Long_files[s], ($"/{Local_Short_listFiles[i]}/{main_Short_files[s]}"), true); } } catch (Exception a) { Console.WriteLine("Ошибка при создании папки и копировании файлов"); } } } // удаляем каталог после записи try { DirectoryInfo dirInfo = new DirectoryInfo(Local_long_listFiles[i]); dirInfo.Delete(true); Console.WriteLine("Каталог удален"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } else { for (int i = 0; i < Local_Short_listFiles.Count; i++) { try { ftp.CreateDirectory(Local_Short_listFiles[i]); main_Long_files = Directory.GetFiles(Local_long_listFiles[i]); main_Short_files = Directory.GetFiles(Local_long_listFiles[i]); for (int s = 0; s < main_Short_files.Length; s++) { main_Short_files[s] = new FileInfo(main_Short_files[s]).Name; ftp.UploadFile(main_Long_files[s], ($"/{Local_Short_listFiles[i]}/{main_Short_files[s]}"), true); } } catch (Exception a) { Console.WriteLine("Ошибка при создании папки и копировании файлов"); } // удаляем каталог после записи try { DirectoryInfo dirInfo = new DirectoryInfo(Local_long_listFiles[i]); dirInfo.Delete(true); Console.WriteLine("Каталог удален"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } //ftp.CreateDirectory("testDir"); //ftp.UploadFile("C:/VisualStudioProject/TestFTP/NET/TestFTP/TestFTP/bin/Debug/test.txt", "/testDir/test.txt", true); //ftp.DownloadFile("test.txt", "testDir/test.txt"); /*string[] fileDetails = ftp.GetFiles(); * foreach (string a in fileDetails) * { * Console.WriteLine(a); * if (a == "./testDir") * { * Console.WriteLine("папка testDir"); * } * }*/ FTPFile[] filesFTP_ = ftp.GetFileInfos(); foreach (FTPFile d in filesFTP_) { Console.WriteLine(); Console.WriteLine(d + "информация о файле"); Console.WriteLine(); Console.WriteLine(d.Dir + " - Dir"); Console.WriteLine(d.Group + " - Group"); Console.WriteLine(d.LastModified + " - LastModified"); Console.WriteLine(d.Link + " - Link"); Console.WriteLine(d.LinkCount + " - LinkCount"); Console.WriteLine(d.LinkedName + " - LinkedName"); Console.WriteLine(d.Name + " - Name"); Console.WriteLine(d.Owner + " - Owner"); Console.WriteLine(d.Permissions + " - Permissions"); Console.WriteLine(d.Raw + " - Raw"); Console.WriteLine(d.Size + " - Size"); Console.WriteLine(d.Type + " - Type"); Console.WriteLine(); /*if (d.Name == "testDir") * { * Console.WriteLine("папка testDir"); * ftp.ChangeWorkingDirectory(d.Name); // сменить рабочую директорию * //foreach() * FTPFile[] files__FTP = ftp.GetFileInfos(); * foreach (FTPFile g in files__FTP) * { * Console.WriteLine(g); * } * * }*/ } // сортировка директории по дате создания (первая самая новая) FTPFile temp; for (int i = 0; i < filesFTP_.Length - 1; i++) { for (int j = i + 1; j < filesFTP_.Length; j++) { if (filesFTP_[i].LastModified < filesFTP_[j].LastModified) { temp = filesFTP_[i]; filesFTP_[i] = filesFTP_[j]; filesFTP_[j] = temp; } } } Console.WriteLine("После сортировки"); foreach (FTPFile a in filesFTP_) { Console.WriteLine(a.Name); } /*if (filesFTP_.Length > 1) * { * for (int i = 1; i < filesFTP_.Length; i++) * { * Console.WriteLine(filesFTP_[i].Name); * ftp.ChangeWorkingDirectory(filesFTP_[i].Name); // сменить рабочую директорию * FTPFile[] files__FTP = ftp.GetFileInfos(); * foreach (FTPFile g in files__FTP) * { * ftp.DeleteFile(g.Name); * } * Console.WriteLine("Файлы удалены из директории"); * ftp.ChangeWorkingDirectoryUp(); * ftp.DeleteDirectory(filesFTP_[i].Name); * Console.WriteLine("Старые директории удалены"); * * } * }*/ // Список локальных директорий /*string[] dirs = Directory.GetDirectories(@"D:\\APP", "*", SearchOption.TopDirectoryOnly); * for (int i = 0; i < dirs.Length; i++) * { * dirs[i] = new FileInfo(dirs[i]).Name; // Выделяем короткое название из пути * } * * // Список удаленных директорий * FTPFile[] file__Details = ftp.GetFileInfos(""); * foreach (FTPFile file in file__Details) * { * if (file.Dir && Array.Exists(dirs, x => x == file.Name)) * { * Console.WriteLine(file.Name + " " + file.Dir); * } * * //Console.WriteLine(file.Name + " " + file.Dir); * }*/ ftp.Close(); Console.Read(); }