C#で更新日時(DateTime)をWIN32_FIND_DATAのメンバに設定するには
Posted: 2016年5月01日(日) 15:28
お世話になります。
C#でWIN32_FIND_DATA構造体の更新日時等のメンバにDateTime型のデータを元に値を設定
したいです。
以下のようにしてLastWriteTimeプロパティを通して値をセットしてみたのですが、設定した値が
ずれてしまいます。
例)
設定する日時 :2010/11/21 6:29:04
設定後のプロパティ値:2010/11/21 6:22:13
setの変換に問題があるのかなと思うのですが、問題点、改善点をご指摘していただけないでしょうか。
よろしくお願いします。
C#でWIN32_FIND_DATA構造体の更新日時等のメンバにDateTime型のデータを元に値を設定
したいです。
以下のようにしてLastWriteTimeプロパティを通して値をセットしてみたのですが、設定した値が
ずれてしまいます。
例)
設定する日時 :2010/11/21 6:29:04
設定後のプロパティ値:2010/11/21 6:22:13
setの変換に問題があるのかなと思うのですが、問題点、改善点をご指摘していただけないでしょうか。
よろしくお願いします。
public DateTime LastWriteTime
{
//m_FindData は WIN32_FIND_DATA型データ
get
{
return DateTime.FromFileTime
((((long)m_FindData.ftLastWriteTime.dwHighDateTime) << 32) |
((uint)m_Win32FindData.ftCreationTime.dwLowDateTime));
}
set
{
m_FindData.ftLastWriteTime.dwHighDateTime = (int)(value.ToFileTime() >> 32);
m_FindData.ftLastWriteTime.dwLowDateTime = (int)(value.ToFileTime() & 0xffffffff);
}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WIN32_FIND_DATA
{
/// <summary>
/// 属性
/// </summary>
public uint dwFileAttributes;
/// <summary>
/// 作成日時
/// </summary>
public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
/// <summary>
/// 最終アクセス日時
/// </summary>
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
/// <summary>
/// 最終更新日時
/// </summary>
public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
/// <summary>
/// ファイルサイズ(上位32bit)
/// </summary>
public uint nFileSizeHigh;
/// <summary>
/// ファイルサイズ(下位32bit)
/// </summary>
public uint nFileSizeLow;
/// <summary>
/// 予約
/// </summary>
public uint dwReserved0;
/// <summary>
/// 予約
/// </summary>
public uint dwReserved1;
/// <summary>
/// ファイル名
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string cFileName;
/// <summary>
/// 8.3形式のファイル名
/// </summary>
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
public string cAlternateFileName;
}