示例#1
0
文件: SFTP.cs 项目: ShinEDL/Spyer
 /// <summary>
 /// 获取SFTP文件列表
 /// </summary>
 /// <param name="remotePath">远程目录</param>
 /// <param name="fileSuffix">文件前缀</param>
 /// <returns></returns>
 public ArrayList GetFileList(string remotePath, string fileSuffix)
 {
     try
     {
         //Connect();
         var files = sftp.ListDirectory(remotePath);
         ///Disconnect();
         var objList = new ArrayList();
         foreach (var file in files)
         {
             string name = file.Name;
             if (name.Length > (fileSuffix.Length + 1) && fileSuffix == name.Split('@')[0])//获取文件前缀的 用户名日期 字符串
             {
                 objList.Add(name);
             }
             else if (name.Length > (fileSuffix.Length + 1) && fileSuffix == name.Split('.')[0])//获取文件前缀的 用户名日期 字符串
             {
                 objList.Add(name);
             }
         }
         return(objList);
     }
     catch (Exception ex)
     {
         throw new Exception(string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
     }
 }
        public List <string> GetDirectoryInfo(string ftpDirectory, List <string> fileExtensions = null)
        {
            if (!_sftpClient.IsConnected)
            {
                _sftpClient.Connect();
            }

            try
            {
                var directoryInfo = _sftpClient.ListDirectory(ftpDirectory).Where(w => w.IsRegularFile).Select(s => s.Name).ToList();

                if (fileExtensions == null)
                {
                    return(directoryInfo);
                }

                return(fileExtensions.Count == 0 ? directoryInfo : (from file in directoryInfo from fileExtension in fileExtensions where file.Contains(fileExtension) select file).ToList());
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                _sftpClient.Disconnect();
            }
        }
        /// <summary>
        /// 取得檔案資料夾完整資訊
        /// </summary>
        /// <param name="ftpFolderPath"></param>
        /// <returns></returns>
        public List <FTPFileInfo> GetFileAndFolderListInfo(string ftpFolderPath)
        {
            try
            {
                var dataArr = _sftp.ListDirectory(ftpFolderPath);

                List <FTPFileInfo> result = new List <FTPFileInfo>();

                foreach (var item in dataArr)
                {
                    result.Add(new FTPFileInfo()
                    {
                        FullFileName = item.FullName,
                        FileName     = Path.GetFileName(item.FullName),
                        ModifiedDate = item.LastAccessTime,
                        FileSize     = item.Length
                    });
                }

                return(result);
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("取得FTP表單失敗,原因:{0}", ex.ToString()));
            }
        }
示例#4
0
        /// <summary>
        /// 取得文件列表
        /// </summary>
        /// <param name="path">路径</param>
        /// <returns></returns>
        public List <string> ListFiles(string path)
        {
            if (!Connect())
            {
                return(null);
            }

            List <string> files = new List <string>();

            try
            {
                sftp.ChangeDirectory("/");
                sftp.ListDirectory(path).ToList().ForEach(f =>
                {
                    files.Add(f.FullName);
                });

                return(files);
            }
            catch (Exception ex)
            {
                // logger.Error("[{0}] 取得文件列表发生错误。", Path, ex);
                return(null);
            }
        }
示例#5
0
        /// <summary>
        /// 获取SFTP文件列表
        /// </summary>
        /// <param name="remotePath">远程目录</param>
        /// <param name="fileSuffix">文件后缀</param>
        /// <returns></returns>
        public ArrayList GetFileList(string remotePath, string fileSuffix)
        {
            try
            {
                Connect();

                var files = sftp.ListDirectory(remotePath);
                Disconnect();
                var objList = new ArrayList();
                foreach (var file in files)
                {
                    string name = file.Name;
                    if (name.Length > (fileSuffix.Length + 1) && fileSuffix == name.Substring(name.Length - fileSuffix.Length))
                    {
                        objList.Add(name);
                        //objList.Add(file.LastWriteTime);
                    }
                }
                return(objList);
            }
            catch (Exception ex)
            {
                // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
                throw new Exception(string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
            }
        }
示例#6
0
        /// <summary>
        /// Delete Folder for target path
        /// </summary>
        /// <param name="folderPath">folder path</param>
        /// <returns>success or not</returns>
        public bool DeleteDirectory(string folderPath)
        {
            bool ret = false;

            if (IsSftpClientActive())
            {
                IEnumerable <SftpFile> sftpFiles = sftpClient.ListDirectory(folderPath);
                foreach (var file in sftpFiles)
                {
                    if ((file.Name != UPPER_PATH_1) && (file.Name != UPPER_PATH_2))
                    {
                        if (file.IsDirectory)
                        {
                            DeleteDirectory(file.FullName);
                        }
                        else
                        {
                            sftpClient.DeleteFile(file.FullName);
                        }
                    }
                }
                sftpClient.DeleteDirectory(folderPath);
                ret = true;
            }
            return(ret);
        }
示例#7
0
        /// <inheritdoc />
        public async Task <object> CanConnect(string relativePath)
        {
            var result = new Dictionary <string, object>();

            try
            {
                sftpClient.Connect();
                result["connectionExists"] = true;
                await Task.Run(() => sftpClient.ListDirectory(relativePath));

                result["folderExists"] = true;
                return(result);
            }
            catch (Renci.SshNet.Common.SftpPathNotFoundException)
            {
                result["folderExists"] = false;
                return(result);
            }
            catch (Exception)
            {
                return(new Dictionary <string, object>
                {
                    ["connectionExists"] = false,
                    ["folderExists"] = false
                });
            }
            finally
            {
                sftpClient.Disconnect();
            }
        }
示例#8
0
        }// TryInitialize()

        //
        //
        //
        //
        // ****             TryGetFiles()               ****
        //
        /// <summary>
        /// Returns a list of all files found on the ftp server.
        /// </summary>
        private bool TryGetFileNames(out List <Renci.SshNet.Sftp.SftpFile> fileList)
        {
            fileList = null;
            SftpClient client;

            using (client = new SftpClient(m_Host, m_PortID, m_UserName, m_PrivateKeyFile))
            {
                try
                {
                    client.Connect();
                    Log.NewEntry(LogLevel.Major, "Connected to {0}", m_Host);
                    string workingDir    = client.WorkingDirectory;
                    var    listDirectory = client.ListDirectory(workingDir);
                    fileList = new List <Renci.SshNet.Sftp.SftpFile>(client.ListDirectory(workingDir));
                    client.Disconnect();
                }
                catch (Exception ex)
                {
                    Log.NewEntry(LogLevel.Major, "Failed to connect. {0}", ex.Message);
                    return(false);
                }
            }
            // Exit
            return(true);
        } // TryConnect()
示例#9
0
        public static void List(SftpClient sftp, string path)
        {
            string hiddenFiles = "."; //Dont list system files and etc

            List <SftpFile> directories = sftp.ListDirectory(path).ToList();

            foreach (var dir in directories)
            {
                if (!dir.Name.StartsWith(hiddenFiles))
                {
                    Console.WriteLine(dir.Name);

                    if (dir.IsDirectory)
                    {
                        List <SftpFile> subDirectories = sftp.ListDirectory(dir.FullName.TrimEnd()).ToList();
                        foreach (var sDir in subDirectories)
                        {
                            if (!sDir.Name.StartsWith(hiddenFiles))
                            {
                                Console.WriteLine(sDir.Name);

                                if (sDir.IsDirectory)
                                {
                                    List(sftp, sDir.FullName);
                                }
                            }
                        }
                    }
                }
            }
        }
示例#10
0
 public IEnumerable <Guid> GetAllGridGUIDs()
 {
     EnsureIsInitialized();
     return(sftp.ListDirectory(CombinePaths(path, StandardFsDriver.GridsDir)).
            Where(f => f.IsRegularFile).
            Where(f => f.Name.EndsWith(".grid")).
            Select(f => new Guid(f.Name.Substring(0, 36))).ToArray());
 }
示例#11
0
        /// <summary>
        /// 获取发布的历史 删除过期的
        /// </summary>
        /// <param name="destinationFolder"></param>
        /// <param name="pageNumber">数量</param>
        /// <returns></returns>
        public List <string> GetDeployHistoryWithOutRemark(string destinationFolder, int pageNumber = 0)
        {
            var result = new List <Tuple <string, DateTime> >();

            try
            {
                if (!destinationFolder.EndsWith("/"))
                {
                    destinationFolder = destinationFolder + "/";
                }

                destinationFolder = destinationFolder + PorjectName + "/";


                if (!_sftpClient.Exists(destinationFolder))
                {
                    return(new List <string>());
                }

                //获取该目录下的所有日期文件夹
                List <SftpFile> folderList;
                if (pageNumber < 1)
                {
                    folderList = _sftpClient.ListDirectory(destinationFolder).Where(r => r.IsDirectory).
                                 OrderByDescending(r => r.LastWriteTime).ToList();
                }
                else
                {
                    folderList = _sftpClient.ListDirectory(destinationFolder).Where(r => r.IsDirectory).
                                 OrderByDescending(r => r.LastWriteTime).Take(pageNumber).ToList();
                }

                foreach (var folder in folderList)
                {
                    if ((folder.Name == ".") || (folder.Name == ".."))
                    {
                        continue;
                    }
                    var temp = folder.Name.Replace("_", "");
                    if (DateTime.TryParseExact(temp, "yyyyMMddHHmmss", null, DateTimeStyles.None, out DateTime d))
                    {
                        result.Add(new Tuple <string, DateTime>(folder.Name, d));
                    }
                }
            }
            catch (Exception ex)
            {
                _logger(ex.Message, LogLevel.Error);
            }

            return(result.OrderByDescending(r => r.Item2).Select(r => r.Item1).ToList());
        }
示例#12
0
 public Task <IEnumerable <string> > GetDirectories(string directoryPath)
 {
     return(HandleCommonExceptions(() => {
         _logger?.LogDebug($"GetDirectories('{directoryPath}')");
         var allFiles = _client.ListDirectory(directoryPath);
         var dirs = allFiles
                    .Where(file => file.IsDirectory)
                    .Select(file => file.Name)
                    .Where(name => !IsSpecificDirectory(name));
         _logger?.LogDebug($"GetDirectories('{directoryPath}'): {dirs.Count()} dirs");
         return dirs;
     }));
 }
示例#13
0
 public List <string> GetFile(string workingdirectory, string extension = ".zip")
 {
     try
     {
         IEnumerable <SftpFile> sftpFileArr  = client.ListDirectory(workingdirectory);
         List <string>          sftpFileList = sftpFileArr.Where(x => Path.GetExtension(x.FullName).Contains(extension)).Select(x => x.FullName).ToList();
         return(sftpFileList);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#14
0
        private static void SftpTest()
        {
            var connInfoSource = new PasswordConnectionInfo("", 22, "", "");

            using (var sftp = new SftpClient(connInfoSource))
            {
                sftp.Connect();
                sftp.ChangeDirectory("outgoing");
                var ftpFiles = sftp.ListDirectory(".").ToList();
                var root     = sftp.ListDirectory("").ToList();

                var Directories = ftpFiles.Where(x => x.IsDirectory).ToList();
                var files       = ftpFiles.Where(x => x.IsRegularFile).ToList();
            }
        }
示例#15
0
        public List <IFile> GetFiles(string filter)
        {
            var files = new List <IFile>();

            var fileList = _client.ListDirectory(_path).Where(x => !x.IsDirectory).ToList();

            if (filter != null)
            {
                fileList = fileList.Where(x => x.Name.Equals(filter, StringComparison.InvariantCultureIgnoreCase)).ToList();
            }

            fileList.ForEach(x => files.Add(new File(x.FullName, _client, x.Name)));

            return(files);
        }
示例#16
0
        public string[] GetFileList()
        {
            //SftpItemCollection list = client.GetList();
            var files = client.ListDirectory(this.client.WorkingDirectory);

            string[] results = new string[files.Count()];
            int      i       = 0;

            foreach (var item in files)
            {
                results[i++] = item.Name;
            }

            return(results);
        }
示例#17
0
        //Uploades a hex file to the Pi and programs it to the Teensy
        //Would be good to parse feedback from the Teensy cli loader
        //Validating the file would good too.
        //The ssh upload library is pretty unforgiving, need to parse and handle errors from it
        public static bool uploadFile(string host_ip, string username, string password, string localFile, string remoteFile)
        {
            try
            {
                using (SftpClient ssh = new SftpClient(host_ip, username, password))
                {
                    ssh.ConnectionInfo.Timeout = new TimeSpan(0, 0, 3);
                    ssh.Connect();
                    FileStream stream = new FileStream(localFile, FileMode.Open);
                    if (ssh.ListDirectory("/").FirstOrDefault(x => x.Name == "teensyTemp") == null)
                    {
                        ssh.CreateDirectory("/teensyTemp");
                    }
                    ssh.ChangeDirectory("/teensyTemp");
                    ssh.UploadFile(stream, remoteFile);
                    ssh.Disconnect();
                    stream.Close();
                }

                using (SshClient ssh = new SshClient(host_ip, username, password))
                {
                    ssh.ConnectionInfo.Timeout = new TimeSpan(0, 0, 3);
                    ssh.Connect();
                    ssh.RunCommand("prog_teensy " + "\"/teensyTemp/" + remoteFile + "\"");
                    ssh.RunCommand("rm " + "\"/teensyTemp/" + remoteFile + "\"");
                    ssh.Disconnect();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("SSH Failed: " + e.ToString());
                return(false);
            }
            return(true);
        }
示例#18
0
        public ActionResult GetAll()
        {
            string result = "";

            using (var client = new SftpClient(host, port, username, password))
            {
                client.Connect();
                result = client.ConnectionInfo.ServerVersion;

                var files = client.ListDirectory("/folder/Test/inbounds/");
                foreach (var file in files)
                {
                    if (!file.Name.StartsWith("."))
                    {
                        string remoteFileName = file.Name;
                        var    filePath       = Path.Combine(@"c:\Project\testing2\", remoteFileName);
                        Stream stream         = System.IO.File.Create(filePath);

                        client.DownloadFile("/folder/Test/inbounds/" + remoteFileName, stream);
                        stream.Close();
                    }
                }
            }
            return(Ok(result));
        }
示例#19
0
        void DownLoadJsonFile()
        {
            if (ServerList.selected_serverinfo_textblock.serverinfo == null)
            {
                return;
            }

            string     ip       = ServerList.selected_serverinfo_textblock.serverinfo.ip;
            string     id       = ServerList.selected_serverinfo_textblock.serverinfo.id;
            string     password = ServerList.selected_serverinfo_textblock.serverinfo.password;
            SftpClient sftp     = new SftpClient(ip, id, password);

            sftp.Connect();

            string local_directory  = AppDomain.CurrentDomain.BaseDirectory;
            string remote_directory = "/home/cofile/bin/";
            var    files            = sftp.ListDirectory(remote_directory);

            foreach (var file in files)
            {
                if (file.Name.Length > 4 && file.Name.Substring(file.Name.Length - 5) == ".json")
                {
                    FileStream fs = new FileStream(local_directory + file.Name, FileMode.Create);
                    sftp.DownloadFile(remote_directory + file.Name, fs);
                    Console.WriteLine("[ download ] " + file.Name);
                }
            }
        }
示例#20
0
        } // end of wpmConnect

        public string[] simpledirectorylist(string remoteFolder)
        {
            try
            {
                using (var sftp = new SftpClient(host, Port, user, pass))
                {
                    String[] dList = new string[] { };
                    sftp.Connect();

                    var files = sftp.ListDirectory(remoteFolder);
                    int i     = 0;
                    foreach (var file in files)
                    {
                        if (!file.Name.StartsWith("."))
                        {
                            i++;
                            Array.Resize(ref dList, i);
                            dList[i - 1] = file.Name;
                            string v = file.Length.ToString();
                        }
                    }
                    sftp.Disconnect();
                    return(dList);
                }
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            return(new string[] { "" });
        }
示例#21
0
        /// <summary>
        /// 取得 SFTP 路徑上的檔案與文件夾
        /// </summary>
        /// <param name="sftpPath">遠端路徑</param>
        /// <param name="filenameExtension">附檔名</param>
        /// <returns></returns>
        public List <string> GetFileList(string sftpPath, string filenameExtension = "")
        {
            try
            {
                Connect();
                IEnumerable <SftpFile> files = sftp.ListDirectory(sftpPath);
                Disconnect();

                if (string.IsNullOrEmpty(filenameExtension))
                {
                    List <string> fileList = new List <string>();
                    foreach (var file in files)
                    {
                        string fileName = Path.GetFileName(file.FullName);
                        if (fileName == "." || fileName == "..")
                        {
                            continue;
                        }
                        fileList.Add(fileName);
                    }

                    return(fileList);
                }
                else
                {
                    return(matchFileName(filenameExtension, files));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#22
0
        public List <string> Receive(TargetTransformData sourceData, string targetPath, string regex)
        {
            List <string> result     = new List <string>();
            string        host       = sourceData.IpAddress;
            string        userName   = sourceData.Login;
            string        password   = sourceData.Password;
            string        sourcePath = sourceData.Path;
            string        localPath  = targetPath;

            WildcardPattern wildCard = new WildcardPattern(regex);

            using (var sftp = new SftpClient(host, userName, password))
            {
                sftp.Connect();
                var files = sftp.ListDirectory(sourcePath);
                foreach (var file in files)
                {
                    string fileName = file.Name;
                    if (wildCard.IsMatch(fileName))
                    {
                        Stream file1 = File.OpenRead(localPath);
                        sftp.DownloadFile(file.FullName, file1);
                        result.Add(localPath + file.Name);
                    }
                }
            }
            return(result);
        }
        public string List_File(string dir)
        {
            string[] strSplit = dir.Split('/');
            string   path     = "";

            for (var i = 0; i < strSplit.Length - 1; i++)
            {
                path += strSplit[i] + "/";
            }
            dir = strSplit[strSplit.Length - 1];

            ArrayList pList = new ArrayList();

            SftpClt.ChangeDirectory(path);// "/");

            string strReturn = "";

            foreach (var entry in SftpClt.ListDirectory(dir))
            {
                if (entry.IsDirectory)
                {
                    //ListDirectory(client, entry.FullName, ref files);
                }
                else
                {
                    strReturn += entry.FullName + "|";
                    //pList.Add(entry.FullName);
                }
            }
            if (strReturn.EndsWith("|"))
            {
                strReturn = strReturn.Substring(0, strReturn.Length - 1);
            }
            return(strReturn);
        }
示例#24
0
        private void DownloadDirectory(SftpClient client, string source, string destination, bool recursive = false)
        {
            // List the files and folders of the directory
            var files = client.ListDirectory(source);

            // Iterate over them
            foreach (SftpFile file in files)
            {
                // If is a file, download it
                if (!file.IsDirectory && !file.IsSymbolicLink)
                {
                    DownloadFile(client, file, destination);
                }
                // If it's a symbolic link, ignore it
                else if (file.IsSymbolicLink)
                {
                    Console.WriteLine("Symbolic link ignored: {0}", file.FullName);
                }
                // If its a directory, create it locally (and ignore the .. and .=)
                //. is the current folder
                //.. is the folder above the current folder -the folder that contains the current folder.
                else if (file.Name != "." && file.Name != "..")
                {
                    var dir = Directory.CreateDirectory(Path.Combine(destination, file.Name));
                    // and start downloading it's content recursively :) in case it's required
                    if (recursive)
                    {
                        DownloadDirectory(client, file.FullName, dir.FullName);
                    }
                }
            }
        }
示例#25
0
        /// <summary>
        /// Deletes the directory recursively.
        /// </summary>
        /// <param name="remoteDirectory">The remote directory.</param>
        public static void DeleteDirectoryRecursive(string remoteDirectory, SftpClient Client)
        {
            if (!Client.Exists(remoteDirectory))
            {
                return;
            }

            foreach (var file in Client.ListDirectory(remoteDirectory))
            {
                if (file.Name.Equals(".") || file.Name.Equals(".."))
                {
                    continue;
                }

                if (file.IsDirectory)
                {
                    DeleteDirectoryRecursive(file.FullName, Client);
                }
                else
                {
                    Client.DeleteFile(file.FullName);
                }
            }

            Client.DeleteDirectory(remoteDirectory);
        }
示例#26
0
        private void downloadWithSFTP(string fileName)
        {
            string host     = parts[1];
            string port     = parts[2];
            string username = parts[3];

            try
            {
                using (Stream stream = new FileStream(getDownloadFolderPath() + @"\" + fileName, FileMode.Create))
                    using (var sftp = new SftpClient(host, Convert.ToInt32(port), username, PasswordTBDownload.Text.ToString()))
                    {
                        sftp.Connect();
                        SftpFileAttributes attributes = sftp.GetAttributes("./" + fileName);
                        var files = sftp.ListDirectory("./");
                        progressBar1.Invoke(
                            (MethodInvoker) delegate { progressBar1.Maximum = (int)attributes.Size; });
                        sftp.DownloadFile(fileName, stream, UpdateProgressBar);
                        MessageBox.Show("Download Complete");

                        sftp.Disconnect();
                        sftp.Dispose();
                    }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Αn Εrror Οccurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
示例#27
0
        public async Task <List <DownLoadedFileModel> > DownLoadAsync(FTPSettings ftpSetting)
        {
            var SemaphoreForRecord           = new SemaphoreSlim(ftpSetting.SemaphoreSlimInit, ftpSetting.SemaphoreSlimMax);
            List <DownLoadedFileModel> files = new List <DownLoadedFileModel>();

            List <SftpFile> ftpFiles;
            List <Task <DownLoadedFileModel> > DLFileTasks = new List <Task <DownLoadedFileModel> >();
            var connInfoSource = new PasswordConnectionInfo(ftpSetting.Server.Host, ftpSetting.Server.Port, ftpSetting.Server.UserId, ftpSetting.Server.Password);

            using (var sftp = new SftpClient(connInfoSource))
            {
                sftp.Connect();
                ftpFiles = sftp.ListDirectory(ftpSetting.RootPath).Where(x => x.IsRegularFile).ToList();

                foreach (var file in ftpFiles)
                {
                    DLFileTasks.Add(DownLoadAFileProcessAsync(file, sftp, ftpSetting.OutPutPath, SemaphoreForRecord));
                }
                var downloadfiles = await Task.WhenAll(DLFileTasks);

                files = downloadfiles.Where(x => !string.IsNullOrEmpty(x.LocalPath)).ToList();
                sftp.Disconnect();
            }
            return(files);
        }
示例#28
0
        public void RunFTPSync()
        {
            var now     = DateTime.UtcNow.ToLocalTime();
            var lastRun = ReadLastRun();

            using (SftpClient ftp = new SftpClient(ConfigurationManager.AppSettings["FTP_URL"],
                                                   ConfigurationManager.AppSettings["FTP_Username"],
                                                   ConfigurationManager.AppSettings["FTP_Password"]))
            {
                var ftp_directory = ConfigurationManager.AppSettings["FTP_Directory"];
                ftp.Connect();
                ftp_directory.Split('/').ToList().ForEach(f => ftp.ChangeDirectory(f));
                var files = ftp.ListDirectory(".");

                files = files.Where(f => !f.Name.Equals(".") && !f.Name.Equals("..")).Where(f => f.LastWriteTime > lastRun && f.LastWriteTime < now).Where(f =>
                {
                    var actualTime = f.ActualLastWriteTime(ftp, ftp_directory);
                    return
                    (actualTime > lastRun &&
                     actualTime < now);
                }).ToList();
                DownloadFiles(files, ftp, ftp_directory);
                WriteLastRan(now.ToString()); //uncommentn after done testing
                //Run shell script to update theia library
            }
        }
示例#29
0
        //------------------------------------------------------------------
        // ファイル表示
        private void printFiles(
            SftpClient _sftp,   // sftpクライアント
            string _Path        // パス
            )
        {
            // ★日本語ファイル名を扱う際の注意★
            // ファイルパスなどはConnectionInfoクラスの中にEncodingというプロパティにエンコーディング情報を設定する。
            // SftpClientのread/write等でのファイル内容でのエンコーディングは別途引数で指定する。

            // 指定パスを調べる
            foreach (var file in _sftp.ListDirectory(_Path))
            {
                if (file.Name.StartsWith("."))
                {
                    continue;
                }

                if (file.IsDirectory)
                {
                    // ディレクトリなら再帰して調べる
                    printFiles(_sftp, file.FullName);
                }
                else
                {
                    // 表示
                    Console.WriteLine($"{file.FullName}\t\t{file.LastAccessTime}\t{file.LastWriteTime}");
                }
            }
        }
        public ActionResult GetFTPPathContents(FTPCredentials credentials, string path)
        {
            using (var sftp = new SftpClient(credentials.Address, credentials.Port, credentials.Login, credentials.Password))
            {
                try
                {
                    sftp.Connect();
                    var results = sftp.ListDirectory(path);

                    return(Json(results.Where(r => r.Name != "." && r.Name != "..").Select(r => new FTPItems
                    {
                        Name = r.Name,
                        Path = r.FullName,
                        Type = r.IsDirectory ? ItemTypes.Folder : ItemTypes.File,
                        Length = r.Length
                    })));
                }
                finally
                {
                    if (sftp.IsConnected)
                    {
                        sftp.Disconnect();
                    }
                }
            }
        }
 public void Test_Sftp_ListDirectory_Without_Connecting()
 {
     using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
     {
         var files = sftp.ListDirectory(".");
         foreach (var file in files)
         {
             Debug.WriteLine(file.FullName);
         }
     }
 }
        public void Test_Sftp_ListDirectory_Not_Exists()
        {
            using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                sftp.Connect();

                var files = sftp.ListDirectory("/asdfgh");
                foreach (var file in files)
                {
                    Debug.WriteLine(file.FullName);
                }

                sftp.Disconnect();
            }
        }
        public void Test_Sftp_ListDirectory_Current()
        {
            using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                sftp.Connect();

                var files = sftp.ListDirectory(".");

                Assert.IsTrue(files.Count() > 0);

                foreach (var file in files)
                {
                    Debug.WriteLine(file.FullName);
                }

                sftp.Disconnect();
            }
        }
        public void Test_Sftp_ListDirectory_HugeDirectory()
        {
            using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                sftp.Connect();

                //  Create 10000 directory items
                for (int i = 0; i < 10000; i++)
                {
                    sftp.CreateDirectory(string.Format("test_{0}", i));
                    Debug.WriteLine("Created " + i);
                }

                var files = sftp.ListDirectory(".");

                //  Ensure that directory has at least 10000 items
                Assert.IsTrue(files.Count() > 10000);

                sftp.Disconnect();
            }
        }
        public void Test_Sftp_Change_Directory()
        {
            using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                sftp.Connect();

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester");

                sftp.CreateDirectory("test1");

                sftp.ChangeDirectory("test1");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1");

                sftp.CreateDirectory("test1_1");
                sftp.CreateDirectory("test1_2");
                sftp.CreateDirectory("test1_3");

                var files = sftp.ListDirectory(".");

                Assert.IsTrue(files.First().FullName.StartsWith(string.Format("{0}", sftp.WorkingDirectory)));

                sftp.ChangeDirectory("test1_1");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_1");

                sftp.ChangeDirectory("../test1_2");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_2");

                sftp.ChangeDirectory("..");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1");

                sftp.ChangeDirectory("..");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester");

                files = sftp.ListDirectory("test1/test1_1");

                Assert.IsTrue(files.First().FullName.StartsWith(string.Format("{0}/test1/test1_1", sftp.WorkingDirectory)));

                sftp.ChangeDirectory("test1/test1_1");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_1");

                sftp.ChangeDirectory("/home/tester/test1/test1_1");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_1");

                sftp.ChangeDirectory("/home/tester/test1/test1_1/../test1_2");

                Assert.AreEqual(sftp.WorkingDirectory, "/home/tester/test1/test1_2");

                sftp.ChangeDirectory("../../");

                sftp.DeleteDirectory("test1/test1_1");
                sftp.DeleteDirectory("test1/test1_2");
                sftp.DeleteDirectory("test1/test1_3");
                sftp.DeleteDirectory("test1");

                sftp.Disconnect();
            }
        }
 private IEnumerable<SftpFile> GetFilesRecur(SftpClient ssh, SftpFile sftpDir)
 {
     if (!sftpDir.IsDirectory)
     {
         return new[] {sftpDir};
     }
     var fl = new List<SftpFile>();
     foreach (var sftpFile in ssh.ListDirectory(sftpDir.FullName))
     {
         if (sftpFile.IsRegularFile)
         {
             fl.Add(sftpFile);
         }
         else if (sftpFile.IsDirectory && sftpFile.Name != "." && sftpFile.Name != "..")
         {
             fl.AddRange(GetFilesRecur(ssh, sftpFile));
         }
     }
     return fl;
 }
                private void button1_Click(object sender, EventArgs e)
                {
                    try
                    {
                        /*if (AllFieldsSet() == false)
                        {
                            Runtime.MessageCollector.AddMessage(Messages.MessageClass.ErrorMsg,
                                                                Language.strPleaseFillAllFields);
                            return;
                        }*/

                        lvSSHFileBrowser.Items.Clear();
                        var ssh = new SftpClient(txtHost.Text, int.Parse(this.txtPort.Text), txtUser.Text, txtPassword.Text);
                        ssh.Connect();
                        var res = ssh.ListDirectory(txtRemoteFolderPath.Text).ToList().OrderBy(file => !file.IsDirectory).ThenBy(file => file.Name);
                        var l = new List<EXImageListViewItem>();
                        foreach (var item in res)
                        {
                            if (item.Name==".")
                            {
                                continue;
                            }
                            EXImageListViewItem imglstvitem = new EXImageListViewItem();
                            imglstvitem.MyImage = item.IsDirectory ? global::My.Resources.Resources.Folder : global::My.Resources.Resources.File;
                            imglstvitem.MyValue = item.FullName;
                            imglstvitem.Tag = item;
                            imglstvitem.SubItems.Add(item.Name);
                            imglstvitem.SubItems.Add(item.IsDirectory ? "" : Tools.Misc.LengthToHumanReadable(item.Length));
                            l.Add(imglstvitem);
                        }
                        ssh.Disconnect();
                        lvSSHFileBrowser.Items.AddRange(l.ToArray());
                        lvSSHFileBrowser.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
示例#38
0
 public void ListDirectoryTest()
 {
     ConnectionInfo connectionInfo = null; // TODO: Initialize to an appropriate value
     SftpClient target = new SftpClient(connectionInfo); // TODO: Initialize to an appropriate value
     string path = string.Empty; // TODO: Initialize to an appropriate value
     Action<int> listCallback = null; // TODO: Initialize to an appropriate value
     IEnumerable<SftpFile> expected = null; // TODO: Initialize to an appropriate value
     IEnumerable<SftpFile> actual;
     actual = target.ListDirectory(path, listCallback);
     Assert.AreEqual(expected, actual);
     Assert.Inconclusive("Verify the correctness of this test method.");
 }
        public void Test_Sftp_ListDirectory_Permission_Denied()
        {
            using (var sftp = new SftpClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                sftp.Connect();

                var files = sftp.ListDirectory("/etc/audit");
                foreach (var file in files)
                {
                    Debug.WriteLine(file.FullName);
                }

                sftp.Disconnect();
            }
        }