2

私はSFTPサーバーの初心者です。SFTP サーバーを使用してファイルをアップロードおよびダウンロードしようとしています。スタンドアロンのアプリケーションです。リモートサーバーからローカルサーバーにファイルをダウンロードしているときに、次のSFTPコードを使用して、指定されたパスの下にファイルのリストをダウンロードできました:

sftp.lcd(details.get("LOCAL_DIR"));
sftp.cd(details.get("REMOTE_DIR"));

List<SftpFile> remoteFiles = sftp.ls();
for(int i = 0 ; i < remoteFiles.size(); ++i) {
    if(remoteFiles.get(i).isFile()) {
        String remoteFile = remoteFiles.get(i).getFilename();
        sftp.get(remoteFile);
        System.out.println("[SFTPOperations][downLoad] Downloaded: " + remoteFile);
        System.out.println("Remote File: " + remoteFile);
        System.out.println("Remote Archive Dir: " + details.get("REMOTE_ARCHIVE_DIR"));
        sftp.rename(remoteFiles.get(i).getFilename(), details.get("REMOTE_ARCHIVE_DIR"));
        System.out.println("[SFTPOperations][downLoad] Archived: " + remoteFile);
    }
}

上記のコードを使用すると、すべてのファイルがリモート ディレクトリからローカル ディレクトリにダウンロードされます。ここでは、与えられた patternに一致するリモート ディレクトリからファイルをダウンロードします。

例:Query*.txt

で始まるテキストファイルをダウンロードしたいQuery

上記の方法を提案してください。

4

2 に答える 2

1

これを試してみましたか?

if (remoteFile.endsWith(".txt")) {
  sftp.get(remoteFile);
}

ただし、何らかの正規表現を使用して、評価するためにトレーニングしているパターンに従ってファイル名が有効かどうかを検証できます

于 2013-06-03T09:05:27.210 に答える
0
using Renci.SshNet;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;

namespace FileDownload
{
    class Program
    {
        static void Main(string[] args)
        {
            string date = DateTime.Now.ToShortDateString();
            using (StreamWriter writer = File.CreateText(ConfigurationManager.AppSettings["localDirectory"]+"U2000_CSVFile_Fetching_log_"+date+".txt"))
            {   
                try
                {

                    string host = ConfigurationManager.AppSettings["host"];
                    string username = ConfigurationManager.AppSettings["username"];

                    string password = ConfigurationManager.AppSettings["password"];

                    string remoteDirectory = ConfigurationManager.AppSettings["remoteDirectory"]+date+"/";

                    Console.WriteLine(password);

                    string localDirectory = ConfigurationManager.AppSettings["localDirectory"] + date;
                    System.IO.Directory.CreateDirectory(localDirectory);
                    Console.WriteLine(localDirectory);
                    using (var sftp = new SftpClient(host, username, password))
                    {


                        sftp.Connect();

                        writer.WriteLine("Connection OK");

                        var files = sftp.ListDirectory(remoteDirectory);

                        foreach (var file in files)
                        {
                            string remoteFileName = file.Name;

                            writer.WriteLine(file.Name);

                            if ((!file.Name.StartsWith(".")))
                            {
                               using (Stream file1 = File.OpenWrite(localDirectory + remoteFileName))
                                {
                                    writer.WriteLine(file.Name + " Download Started");

                                    sftp.DownloadFile(remoteDirectory + remoteFileName, file1);

                                    writer.WriteLine(file.Name + " Downloaded Successfully_"+date);
                                }
                            }

                        }

                    }

                }
                catch (Exception ex)
                {
                    writer.WriteLine(ex.Message);
                }


            }
            Console.WriteLine("U2000 .csv files fetching Scheduler is Running");
            Console.ReadLine();
        }
    }
}
于 2018-07-26T14:14:37.030 に答える