3

ディレクトリからのファイルのリストがあり、ファイル名で並べ替えたいと思います。

これがメインコードです:

var localPath = this.Server.MapPath("~/Content/Img/" + type + "/");
var directory = new DirectoryInfo(localPath);
isDirectory = directory.Exists;

if (isDirectory)
{
    foreach (FileInfo f in directory.GetFiles())
    {
        Picture picture = new Picture();

        picture.ImagePath = path;
        picture.CreationDate = f.CreationTime;
        picture.FileName = f.Name;
        listPictures.Add(picture);
    }
}

これが、すべてのファイルが保存されているPictureクラスです。

public class Picture
{
    public string ImagePath { get; set; }
    public string FileName { get; set; }
    public DateTime CreationDate { get; set; }
}

ファイル名の順にファイルリストを並べ替えるにはどうすればよいですか?

4

5 に答える 5

9

forループを変更するだけです:

foreach (FileInfo f in directory.GetFiles().OrderBy(fi=>fi.FileName))
{

}

または、次のコードを使用してループ全体を書き直すこともできます。

var sortedFiles = from fi in directory.GetFiles()
                  order by fi.FileName
                  select new Picture { ImagePath = path, CreationDate = f.CreationTime, FileName = f.FileName };

listPictures.AddRange(sortedFiles);
于 2012-08-28T08:09:16.183 に答える
2
listPictures = listPictures.OrderBy(x => x.FileName).ToList();
于 2012-08-28T08:09:07.050 に答える
2

ラムダ式や拡張メソッドを使用できます。例えば:

listPictures.OrderBy(p => p.FileName).ToList();
于 2012-08-28T08:09:55.593 に答える
1

LINQは最初から使用できます。

var files = from f in directory.EnumerateFiles()
    let pic = new Picture(){
        ImagePath = path;
        CreationDate = f.CreationTime;
        FileName = f.Name;
    }
    orderby pic.FileName
    select pic;

Directory.EnumerateFiles(path)のみを使用すると、より効率的になることに注意してくださいFileName

于 2012-08-28T08:17:58.837 に答える
1

EnumerateFilesは遅延読み込みを実行し、より大きなディレクトリに対してより効率的になる可能性があることに注意してください。

dir.EnumerateFiles().OrderBy(f => f.FileName))
于 2012-08-28T08:10:37.107 に答える