我正在使用一个递归地快速扫描文件夹的文件和目录的库。输出是一个List<WIN32_FIND_DATAW>
。单击此处查看 stuct 的内容。
我设法使用以下扩展方法将 FILETIME 转换为 DateTime:
public static DateTime convertToDateTime(this System.Runtime.InteropServices.ComTypes.FILETIME time)
{
ulong high = (ulong)time.dwHighDateTime;
int low = time.dwLowDateTime;
uint uLow = (uint)low;
high = high << 32;
return DateTime.FromFileTime((long)(high | (ulong)uLow));
}
我得到的文件大小为:
(UInt64)((nFileSizeHigh * (2 ^ 32)) + nFileSizeLow);
我在网上找到那些方法不记得在哪里。
无论如何,该库包含一个需要 WIN32_FIND_DATA 列表的方法。我想调用那个方法,但我不知道如何创建一个 WIN32_FIND_DATA 对象
这是我遍历 C:\ Drive 时创建的随机 WIN32_FIND_DATA 对象
我怎么能构造相同的对象?我不知道如何获得 cAlternateName 虽然我认为我不需要它。我不知道如何返回并将 DateTime 转换为 FILETIME。最后,我不知道如何将文件大小转换为 nFileSizeHigh 和 nFileSizeLow。
该库使用此方法来构造 WIN32_FIND_DATAW 对象:
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern IntPtr FindFirstFileW(string lpFileName, out WIN32_FIND_DATAW lpFindFileData);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
public static extern bool FindNextFile(IntPtr hFindFile, out WIN32_FIND_DATAW lpFindFileData);
[DllImport("kernel32.dll")]
public static extern bool FindClose(IntPtr hFindFile);
也许存在一种public static extern bool FindFile(IntPtr hFindFile, out WIN32_FIND_DATAW lpFindFileData);
方法。这样我就可以构造我需要的 WIN32_FIND_DATAW 对象。
编辑
简而言之,我想通过拥有文件的完整路径来构造一个 WIN32_FIND_DATAW 对象