C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: FTPサーバからのディレクトリ/ファイル更新年月日取得


(過去ログ 73 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■42447 / inTopicNo.1)  FTPサーバからのディレクトリ/ファイル更新年月日取得
  
□投稿者/ asuka (7回)-(2009/10/15(Thu) 20:39:36)

分類:[C#] 

.Net 2005 C#にてFTPサーバにアップロードするプログラムを組んでおります。

MethodにListDirectoryDetailsを指定し、FTPサーバからの応答データは1レコードづつに区切り取得出来ます。
[属性][?][所有者][グループ][サイズ][更新年月日][ファイル名]

ここではUNIX系のFTPサーバについて記載することになってしまいますが、

上記データをパースして取得出来るのですが、問題は[更新年月日]です。



現在年に更新した場合の取得文字列:strTmp
Aug 4 17:30
現在年より前に更新した場合の取得文字列:strTmp
Oct 16 2008

のように、現在年かどうかによって最後の文字列が時間だったり、過去年だったりします。

現在年かどうかを無視して
Convert.ToDateTime(strTTmp, CultureInfo.GetCultureInfo("ja-JP"));

としますと、現在年より前に更新した場合の文字列は、
Oct 16 2008 → 2008/10/16 0:00:00
のように上手く変換出来るのですが、

現在年に更新した場合の年月日が滅茶苦茶に変換されます。
Aug 4 17:30 → 2009/10/15 4:17



YYYY/MM/DD形式で上手く変換出来る手段があれば御教授願います。

また、手段がない場合、Oct 16 2008のような文字列から現在年か過去年か上手く判断出来る手法があれば、
あわせて教えて頂けると幸いです。



参考サイト
http://blogs.msdn.com/adarshk/archive/2004/09/15/230177.aspx

※レコードの2カラム目は不明のままです。

引用返信 編集キー/
■42452 / inTopicNo.2)  Re[1]: FTPサーバからのディレクトリ/ファイル更新年月日取得
□投稿者/ オショウ (338回)-(2009/10/15(Thu) 21:16:55)
2009/10/15(Thu) 21:17:14 編集(投稿者)
No42447 (asuka さん) に返信
> 上記データをパースして取得出来るのですが、問題は[更新年月日]です。
> 
> 現在年に更新した場合の取得文字列:strTmp
> Aug 4 17:30
> 現在年より前に更新した場合の取得文字列:strTmp
> Oct 16 2008
> 
> のように、現在年かどうかによって最後の文字列が時間だったり、過去年だったりします。

  ええ〜と・・・
  FTP通信をソケット通信で直接行うプログラムを組んだことがありましたが
  いろいろ調べた結果、年か時間かは自身で判断して文字列を作り直し、変換す
  る必要がありました。

  VB.NETですが・・・

        ' 文字列にコロン(:)が含まれていれば、
        ' 時間を表しているとみなす
        If yearortime.IndexOf(":") = -1 Then
            GetDate = yearortime & "/" & m & "/" & day
        Else
            GetDate = DateTime.Now.Year.ToString() & "/" & m & "/" & day & " " & yearortime
        End If

  と記載してました。

  尚・・・

        Dim regex As Regex

        regex = New Regex("(?<pmode>\S+)\s+" _
                          & "(?<link>\S+)\s+" _
                          & "(?<owner>\S+)\s+" _
                          & "(?<group>\S+)\s+" _
                          & "(?<size>\S+)\s+" _
                          & "(?<month>\S+)\s+" _
                          & "(?<day>\S+)\s+" _
                          & "(?<yearortime>\S+)\s+" _
                          & "(?<name>.+)")

  で、文字列を分解して取得できるようにしていましたので・・・
  参考にして下さい。

※ UNIX系FTPサーバーで実績はありますが、どこでも?かは
  未確認です。WindowsのIISで、UNIX型にしていれば問題なく
  使えました。

以上。参考まで

引用返信 編集キー/
■42453 / inTopicNo.3)  Re[2]: FTPサーバからのディレクトリ/ファイル更新年月日取得
□投稿者/ Hongliang (486回)-(2009/10/15(Thu) 21:34:46)
DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles) を使えばいいかな。
第二引数で複数のフォーマットを渡せますので、MMM d yyyy と MMM d H:mm を。
// あ、d とか H とかは 0 が先行するかどうかで数が変わります。
// 詳しくは MSDN の「カスタムの日付と時刻の書式指定文字列 」をご覧ください。
IFormatProvider は en-US の CultureInfo が無難かな。
DateTimeStyles.NoCurrentDateDefault を「つけないことで」、年が含まれていない場合は現在の年とみなされて変換されます。
引用返信 編集キー/
■42485 / inTopicNo.4)  Re[3]: FTPサーバからのディレクトリ/ファイル更新年月日取得
□投稿者/ asuka (8回)-(2009/10/16(Fri) 11:02:59)
オショウさん Hongliangさん

御教授ありがとうございます!!

まず[更新年月日]には現在年と過去年で形式が違うことを明らかにして頂いた上で、

取得方法まで教えて頂き感謝でございます。
m(__)m



お二人のアドバイスを元に実装することが出来ました。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -