#

WPF: Files sortieren
 
Wie sortiert man die Dateien eines Verzeichnisses in einer WPF Anwendung
 
Lösung:
Die Dateien eines DirectoryInfo Verzeichnisses erhältm man mit .GetFiles();
Um diese zu Sortieren muss man direkt an das GetFiles ein .OrderBy(Function) anhängen, in welcher die Sortierung angegeben wird.
Hier ein Beispiel:
 

myDirectoryInfo.GetFiles().OrderBy(f => f.LastWriteTime))

 
Die komlexe Schreibweise innerhalb der OrderBy-Klammer beinhaltet eine function.
Mit CreationTime wird nach der Erstellungszeit sortiert, mit LastWriteTime wird die letzte Schreibzeit ermittelt.


Code Beispiel in C#:

//------< @Loop: Files >------
foreach (FileInfo fileInfo in folder.GetFiles().OrderBy(f => f.LastWriteTime)) //*un-ordered
{
..
}
 

 
Unter Visual Studio zeigt Intellisense die Orderby<> und OrderByDescending<> als (extension) IOrderedEnumerable<Fileinfo>.... an

 
 
Code Beispiel:
Loop durch alle sortierten Image-Files eines Verzeichnisses
Dabei entspricht hier die Sortierung dem LastWriteTime, da die Dateien schon von MemoryStick oder USB Stick auf die Festplatte oder NAS Übertragen wurden.

//------< @Loop: Files >------
foreach (FileInfo fileInfo in folder.GetFiles().OrderBy(f => f.LastWriteTime)) //*un-ordered
{
//----< File >----
if (".jpg|.mp4|.mov|.jpeg|.mpeg|.png".Contains(fileInfo.Extension.ToLower()))
{
//----< IsPhoto >----
String sDate = fileInfo.LastWriteTime.ToString("yyyy-MM-dd");
Debug.WriteLine("#Debug: Photo-Date: " + fileInfo.LastWriteTime.ToString("yyyy-MM-dd hhmmss") + " File: " + fileInfo.Name );
 
//< Check String Array >
if (arrFolder_Dates.Contains(sDate) == false)
{
//--< not found >--
//< add UserControl >
add_UserControl(sDate);
//</ add UserControl >
 
//< add item in Array-List >
arrFolder_Dates.Add(sDate);
//</ add item in Array-List >
 
//--</ not found >--
}
//</ Check String Array >
 
//--< add Photo to UserControl >--
string sUcName = "UcFolderSet_" + sDate.Replace("-", "_");
 
UcFolderSet ucFolder_of_Date = find_UserControl(panel_Folders, sUcName);
if (ucFolder_of_Date != null)
{
ucFolder_of_Date.add_Image(fileInfo.FullName);
ucFolder_of_Date.UpdateLayout();
}
//--</ add Photo to UserControl >--
 
//----</ IsPhoto >----
}
//----</ File >----
}
//------</ @Loop: Files >------

 
 
Ergebnis: die Sortierung nach Datum LastWriteTime wurde richtig angewandt.
Hinter dem Datum steht die Dateibenennung, und diese wäre zuvor falsch gewesen.

 
 
Ohne Sortierung:
normaler Zugriff auf Dateien in einem Verzeichnis mit

//------</ @Loop: Files >------
foreach (FileInfo fileInfo in folder.GetFiles())
{
..
}
//------</ @Loop: Files >------
 

 
Code Beispiel, alt: ohne Sortierung, Standard

//--------< Folder >--------
DirectoryInfo folder = new DirectoryInfo(folder_Path);
if (folder.Exists)
{
//------< @Loop: Files >------
foreach (FileInfo fileInfo in folder.GetFiles())
{
//----< File >----
if (".jpg|.jpeg|.png".Contains(fileInfo.Extension.ToLower()))
{
//----< IsPhoto >----
String sDate = fileInfo.LastWriteTime.ToString("yyyy-MM-dd");
//add_Image(fileInfo.FullName);
//----</ IsPhoto >----
}
//----</ File >----
}
//------</ @Loop: Files >------
}
//--------</ Folder >--------

 
Mobile

.