ne pas être en mesure de convertir de FILETIME (windows temps) de type dateTime ( j'ai une date différente )

La plupart des fichiers que j'ai lu d'obtenir le droit de temps lorsque vous utilisez la méthode suivante pour convertir:

//works great most of the time
private static DateTime convertToDateTime(System.Runtime.InteropServices.ComTypes.FILETIME time)
{
    long highBits = time.dwHighDateTime;
    highBits = highBits << 32;
    return DateTime.FromFileTimeUtc(highBits + time.dwLowDateTime);
}

Ici, j'ai un exemple dans visual studio pour montrer comment cette méthode ne fonctionne pas pour l'exemple, je vais vous montrer la taille réelle du fichier dans mon ordinateur et le débogage. Ainsi, le fichier qui se trouve être dans mon debug:

"A:\Users\Tono\Documents\Visual Studio 2010\Projects\WpfApplication4\WpfApplication4\obj\x86\Debug\App.g.cs"
ne pas être en mesure de convertir de FILETIME (windows temps) de type dateTime ( j'ai une date différente )

Et voici le FILETIME que je suis en train de convertir DateTime "j'ai besoin de la LastWriteTime par la voie"

ne pas être en mesure de convertir de FILETIME (windows temps) de type dateTime ( j'ai une date différente )

Ici, vous pouvez voir que dwHighDateTime = 30136437 et aussi que dwLowDateTime = -2138979250 à partir de ce fichier.

Et quand je lance ma méthode, en plus d'autres techniques je obtenir les dates suivantes:
ne pas être en mesure de convertir de FILETIME (windows temps) de type dateTime ( j'ai une date différente )

Donc, jusqu'à présent, tout semble fonctionner parfaitement. Mais pourquoi est-ce que quand je de parcourir et de rechercher ce fichier spécifique dans windows je reçois une autre date !? Ici est la date que je reçois quand voir les propriétés du fichier:
ne pas être en mesure de convertir de FILETIME (windows temps) de type dateTime ( j'ai une date différente )

Pourquoi les dates ne correspondent pas? Ce que je fais mal?

Pourquoi vous faites ça à la dure? Semble que vous êtes assez bien la réécriture de la classe FileInfo... msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx
Je ne sais pas pourquoi l'OP c'est ce que fait à la dure. Lorsque vous travaillez avec de longs noms de chemin d'accès, c'est à des chemins de plus de [MAX_LENGTH] = 260 octets, vous devez pour réécrire la plupart de Système.IO utiliser du code non managé. Il n'y a plus d'infos à être trouvé ici: blogs.msdn.com/b/bclteam/archive/2007/02/13/...
Il est légitime de scénarios d'utilisation FILETIME / GetFileTime au lieu de FileInfo: Par exemple, si vous souhaitez obtenir des statistiques sur un fichier dont la poignée que vous avez déjà ouvertes (et ne peut pas ré-ouvrir via FileInfo pour une certaine raison)

OriginalL'auteur Tono Nam | 2011-05-21