FileInfo - Select one File out of one FileInfo[]
Question
i have two FileInfo[] Array's and i want compare the Files with identical Names about their File Size and Last Modified Date. But how can i select a File out of a FileInfo[] with a specific Name?
My Code doesnt work, because i cant use FileInfo.Select to get a new FileInfo out. Any clues?
foreach (FileInfo origFile in fiArrOri6)
{
FileInfo destFile = fiArrNew6.Select(file => file.Name == origFile.Name);
if (origFile.Length != destFile.Length || origFile.LastWriteTime != destFile.LastWriteTime)
{
//do sth.
}
}
Thanks for any help :)
btw. Any other charming solution for this Problem would be great. btw. #2 : does someone has good learning material for FileInfo?
Solution
You could use the FirstOrDefault that takes a filter
FileInfo destFile = fiArrNew6.FirstOrDefault(file => file.Name == origFile.Name);
Or, if you don't want the default, you can use the equivalent First that takes a filter
FileInfo destFile = fiArrNew6.First(file => file.Name == origFile.Name);
OTHER TIPS
destFile
is not a FileInfo, it is a linq query. Change its name to something like fileQuery
and then
var fileQuery = fiArrNew6.Where(file => file.Name == origFile.Name);
var destFile = fileQuery.FirstOrDefault();
if (destFile != null)
//...
Bonus tip: avoid names like fiArrNew6
; they're confusing. Descriptive names like newFiles
are easier to read, and they allow you to change your code without having to rename your variables.
Change the Select
into a Where
:
FileInfo destFile = fiArrNew6.Where(file => file.Name == origFile.Name).First();
The Where
will return an IEnumerable<FileInfo>
, using First
with that will ensure the first such occurrence is used (if there are none, it will throw an exception).