C#で更新日時(DateTime)をWIN32_FIND_DATAのメンバに設定するには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Mc

C#で更新日時(DateTime)をWIN32_FIND_DATAのメンバに設定するには

#1

投稿記事 by Mc » 9年前

お世話になります。
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;
}

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: C#で更新日時(DateTime)をWIN32_FIND_DATAのメンバに設定するには

#2

投稿記事 by YuO » 9年前

Mc さんが書きました:

コード:

	get
	{
		return	DateTime.FromFileTime
				((((long)m_FindData.ftLastWriteTime.dwHighDateTime) << 32) |
				 ((uint)m_Win32FindData.ftCreationTime.dwLowDateTime));
	}
ここで,ftLastWriteTimeとftCreationTimeを使っているのが問題では?

Mc

Re: C#で更新日時(DateTime)をWIN32_FIND_DATAのメンバに設定するには

#3

投稿記事 by Mc » 9年前

YuO 様
おっしゃる通り、単純なコピペミスでした;;。
どうもありがとうございましたm(__)m

閉鎖

“C言語何でも質問掲示板” へ戻る