FTPの特定のフォルダからファイルをダウンロードする必要がありますが、作成時間は1時間以内です。だから、基本的に私は、そのフォルダからすべてのファイルをリストし、タイムスタンプが実行時間から1時間以上変化しないものだけをダウンロードする必要があります。どのようにFTP上のファイルのタイムスタンプを解析するためのアイデアですか?サードパーティのFTPクライアントライブラリを使用することはできません。最後の1時間以内に作成されたファイルをFTPからダウンロードする
答えて
これは私が今思いついたものです。
foreach (var fileName in filesNamesFromFtpFolder)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(@"ftp://" + host + @"/" + folder + @"/" + fileName);
request.Method = WebRequestMethods.Ftp.GetDateTimestamp;
request.Proxy = null;
using (FtpWebResponse resp = (FtpWebResponse)request.GetResponse())
{
if (DateTime.Now.Subtract(TimeSpan.FromMinutes(60)) < resp.LastModified)
{
//download this file...
}
}
}
メインタスクは、読み取りファイルのタイムスタンプではなく、最後の1時間以内に変更されたと判断することができます。サーバーが同じTimeZoneにある場合は、時間と同じになります。そうでない場合は、時間のずれがあります。常に同じサーバーを使用している場合、これはかなり信頼できる方法で修正できます。しかし、世界中の複数のサーバーを使用している場合、これはもう少し複雑になります。だから注意してください。
は残念ながら、.NETフレームワークによって提供される機能を使用してディレクトリ内のすべてのファイルの変更のタイムスタンプを取得するには何の本当に信頼性の高い効率的な方法はそれとして、ありませんこれを処理するためにいくつかのより多くのエレガントな方法があることを確認したが... FTP MLSD
をサポートしていません。 MLSD
コマンドは、標準化された機械可読フォーマットのリモートディレクトリのリストを提供します。コマンドとフォーマットはRFC 3659で標準化されています。 .NETフレームワークによってサポートされている
あなたが使用できる代替、:ディレクトリ内のすべてのファイルの詳細を取得するために
ListDirectoryDetails
方法(FTPLIST
コマンド)、その後、あなたはFTPサーバの特定のフォーマットを扱います詳細のDOS/Windows形式:C# class to parse WebRequestMethods.Ftp.ListDirectoryDetails FTP response
* nixのフォーマット:Parsing FtpWebRequest ListDirectoryDetails lineGetDateTimestamp
メソッド(FTPMDTM
コマンド)を使用して、各ファイルのタイムスタンプを個別に取得します。利点は、応答がRFC 3659からYYYYMMDDHHMMSS[.sss]
によって標準化されていることです。欠点は、ファイルごとに個別のリクエストを送信する必要があることです。これは非常に非効率的なことです。ファイルの修正時刻はLastModified
propertyにあなたのために解析されます。const string uri = "ftp://example.com/remote/path/file.txt"; FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri); request.Method = WebRequestMethods.Ftp.GetDateTimestamp; FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Console.WriteLine("{0} {1}", uri, response.LastModified); if (response.LastModified > DateTime.Now.Subtract(TimeSpan.FromHours(1))) { // download }
ウェイ簡単に(私はあなたがいないことを知って)現代MLSD
コマンドをサポートしているサードパーティ製のFTPクライアントの実装やその缶を使用することです時間制約を与えられたファイルを直接ダウンロードする。
たとえば、WinSCP .NET assemblyは、MLSD
とtime constraintsの両方をサポートします。
あなたの特定のタスクのためにも例があります:How do I transfer new/modified files only?
の例では、PowerShell用ですが、C#に容易に変換されますが:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "ftp.example.com",
UserName = "username",
Password = "password",
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Download files modified with the last hour
TransferOptions transferOptions = new TransferOptions();
transferOptions.FileMask = "*>=1H";
session.GetFiles("/remote/path/*", @"C:\local\path\", false, transferOptions).Check();
}
もtime constraintsの構文を参照してください。
(私はWinSCPのの著者です)
- 1. 最後の1時間に生成されたファイルをFTPにアップロードする
- 2. Unix:最後の1日以内に作成されたパスのないファイル名のみを表示するコマンド
- 3. FTPからファイルをストリーミングして同時にダウンロードさせる
- 4. 新しいレコードの作成から1時間以内に更新されたレコードの検索
- 5. HP-UXで1時間以内に修正されたファイルを見つける
- 6. FTPからZIPファイルをダウンロードし、ウェブサイト内のフォルダにコピーする
- 7. ftpからファイルをダウンロードするには?
- 8. FTPからローカルストレージにファイルをダウンロードする
- 9. ディレクトリが作成されてからちょうど1時間後に削除
- 10. ProgressでFTPからファイルをダウンロード - TotalBytesToReceiveは常に-1ですか?
- 11. クエリークラウドクエリーを使用して24時間以内に作成されたドキュメントの数。
- 12. ftpサーバーからファイルをダウンロード
- 13. xmlファイルをFTPからダウンロード
- 14. Vaadin 7 - 動的に作成されたファイルの即時ダウンロード
- 15. Android FTPクライアントアプリケーション - FTPサーバからファイルをダウンロードするには
- 16. C#でFTPからファイルをダウンロードする
- 17. サーバーに作成するのに長い時間がかかるファイルをダウンロードする最良の方法
- 18. 最後の時間から
- 19. 最後にダウンロードしたファイルのダウンロード時にIISに通知する
- 20. wgetをftpのダウンロードに使用している間、トリミングされたディレクトリツリーを作成する方法
- 21. PowerShellを使用してFTPから最新のファイルをダウンロード
- 22. 最後に3か月間に作成されたノードをチェックするMysqlクエリ
- 23. VBS ftpのダウンロード待ち時間
- 24. ファイルの最後に変更された時間をシェルスクリプトでチェックする方法
- 25. 最近24時間以内に変更された大きなファイルを見つけるためのBashスクリプト
- 26. 最後の1時間はFullCalendarに表示されません
- 27. 時間短縮を使用するクエリの作成方法(1日以内、2日以内など)?
- 28. nodejsのftpサーバーからファイルをダウンロード
- 29. Linqの1週間以内に最後のレコードの値を更新する
- 30. VSTS内線から生成されたCSVファイルのダウンロードを防止するコンテンツセキュリティポリシー
OPは、タイムスタンプを取得した場合SOポスト、以下を参照してください。http://stackoverflow.com/questions/1040371/system-net-ftpwebrequest-をgetdatetimestamp-example –
@Georgeありがとうございました!それは私が必要としていたようです。 –