예제 #1
0
        [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();
        }
예제 #2
0
        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);
        }
예제 #3
0
        /// <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();
     }
 }
예제 #6
0
        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);
        }
예제 #7
0
 /// <summary>
 /// 返回指定目录的文件
 /// </summary>
 /// <param name="dirName"></param>
 /// <param name="connection"></param>
 /// <returns></returns>
 private FTPFile[] GetFileInfos(string dirName, FTPConnection connection)
 {
     return(connection.GetFileInfos(dirName));
 }
예제 #8
0
 /// <summary>
 /// 返回当前工作目录的文件
 /// </summary>
 /// <param name="connection"></param>
 /// <returns></returns>
 private FTPFile[] GetFileInfos(FTPConnection connection)
 {
     return(connection.GetFileInfos());
 }
예제 #9
0
        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();
            }
        }
예제 #10
0
        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();
        }