2010-12-14 9 views
1

Si je compare deux fichiers sans arrondi jusqu'à minute résultat pour ces requêtesproblème de comparer deux fichiers basés sur datetime jusqu'à minutes?

var queryList1Only3 = (from file in list1 select file).Except(list2, myFileCompare2); 
var queryList1Only33 = (from file in list2 select file).Except(list1, myFileCompare2); 

sont

12/14/2010 4:14:10 PM  C:\xml\Tracker.xml 
10/13/2010 3:00:27 PM  D:\xml\Tracker.xml 

Mais si j'autour de la datetime jusqu'à minute le résultat pour queryList1Only3 est

12/14/2010 4:14:10 PM  C:\xml\Tracker.xml 

et deuxième requête ne renvoie rien mais vide parce que j'ai modifié ce fichier C:\xml\Tracker.xml seulement .. et l'autre fichier est sans changement es ...

et

public class FileCompareLastwritetime : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo> 
     { 
      public FileCompareLastwritetime() { } 
      public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2) 
      { 
       return RoundToMinute(f1.LastWriteTime) == RoundToMinute(f2.LastWriteTime); 
      } 
      public int GetHashCode(System.IO.FileInfo fi) 
      { 
       return RoundToMinute(fi.LastWriteTime).GetHashCode(); 
      } 
     } 


public static DateTime RoundToMinute(DateTime time) 
      { 
       return new DateTime(time.Year, time.Month, time.Day, 
            time.Hour, time.Minute, 0, time.Kind); 
      } 

Toute suggestion ??

EDIT:

IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.*", System.IO.SearchOption.AllDirectories); 
    IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories); 
+0

S'il vous plaît se référer à ce lien ... Vous pourriez obtenir différentes options ... http://stackoverflow.com/questions/2956748/datetime-comparison-precision/2956818 –

+0

@The King: pouvez-vous dire le problème dans mon code?? – bala3569

+0

Pouvez-vous ajouter quelques détails? D'où proviennent les listes file1 et file2? Ce premier ensemble de résultats est-il le résultat des deux requêtes ou d'un seul? Si oui, lequel? – Rikalous

Répondre

1

DateTime est égal à Tiques qui peut se compare être légèrement différent lorsque vous définissez les valeurs à l'aide time.Year, time.Month, etc. La meilleure méthode de troncature DateTime J'ai trouvé est le suivant:

///<summary> 
/// Extension methods for DateTime class 
///</summary> 
public static class DateTimeExt 
{ 
    /// <summary> 
    /// <para>Truncates a DateTime to a specified resolution.</para> 
    /// <para>A convenient source for resolution is TimeSpan.TicksPerXXXX constants.</para> 
    /// </summary> 
    /// <param name="date">The DateTime object to truncate</param> 
    /// <param name="resolution">e.g. to round to nearest second, TimeSpan.TicksPerSecond</param> 
    /// <returns>Truncated DateTime</returns> 
    public static System.DateTime Truncate(this System.DateTime date, long resolution) 
    { 
     return new System.DateTime(date.Ticks - (date.Ticks % resolution), date.Kind); 
    } 
} 

Utilisation: myDateTime.Truncate (TimeSpan.TicksPerMinute) pour tronquer en minutes. Cela ne tourne pas mais votre exemple non plus.

Questions connexes