1

まず、ftp サーバーにファイル名のリストがあります。

20130612_00
20130612_06
20130612_12

Main() には、次のようなものがあります

Public Main()
{
    //function to download all file from ftp server to local directory
    DownLoadFileFromFTP();

    //function to open the latest file in the local directory
    OpenLatestFileInLocal();
}

ローカルディレクトリのファイル名から最新ファイルをチェックする機能が欲しいです。この場合、最新のファイルは20130612_12

私の考えは、最初に特殊文字を削除して数字のみを取得することですlist<int>。現在、次のようになっています。

2013061200
2013061206
2013061212

したがって、内の最大値を確認するlist<int>と、最新のファイルがどれかがわかります。

私の最終的な目的は、実行して最新のファイルを開くことですOpenTxtFile(string fileName)

したがって、私は以下のような関数を持っています:

private void OpenLatestFileInLocal()
{
    // Get list of fileName from local directory
    // Ouput fileList_str = (string){20130612_00 , 20130612_06, 20130612_12}
    List<string> fileList_str = Directory.EnumerateFiles(localDir, "*.txt", SearchOption.AllDirectories).Select(Path.GetFileName).ToList();

    foreach (string fileName in fileList_str)
    {
        fileLIst_int.Add(Convert.ToInt32(RemoveSpecialCharacters(fileName)));
    }
    // Ouput: fileList_int = (int){2013061200 , 2013061206, 2013061212}

    int Latest = fileLIst_int.Max(); //Output: Latest = 2013061212

    // Problem is here.. my OpenTextFile function need to pass the fileName in string
    // But I identify the latest file as an (int) as 2013061212
    // I need to know 2013061212 is actually 20130612_12.txt
    // so that, I can pass the fileName into OpenTxtFile(string fileName)

    OpenTxtFile(fileName_Latest);

}

private void OpenTextFile(string fileName)
{

   // this function will only open file based on string fileName in local directory

}
4

1 に答える 1

1

を既に使用している場合は、パスと解析された日付の両方を格納Linqするために匿名クラスDateTime.ParseExactを設定します (また、に移動するのではなく を参照することもできますint)。

private void OpenLatestFileInLocal()
{
    var latestFile = Directory
        .EnumerateFiles(localDir, "*.txt", SearchOption.AllDirectories)
        .Select(path => new { Path = path, Date = DateTime.ParseExact(
            Path.GetFileNameWithoutExtension(path), "yyyyMMdd_HH", 
            CultureInfo.InvariantCulture) })
        .OrderByDescending(df => df.Date)
        .Select(df => df.Path)
        .FirstOrDefault();

    if (latestFile != null)
    {
        OpenTxtFile(latestFile);
    }
}
于 2013-06-12T04:17:19.653 に答える