FileSystemInfo.LastWriteTime
プロパティはCFでのみ読み込まれます。 その日付を変更する別の方法はありますか?Compact FrameworkのLastWriteDateファイルを変更します。
答えて
素晴らしい、ありがとう – fra
申し訳ありません... FILETIMEのCLRタイプは何ですか?この署名は正しいですか? [DllImport( "coredll.dll")] パブリック静的extern bool SetFileTime(IntPtrパス、ref long?creationTime、ref long?lastAccessTime、ref long?lastWriteTime); – fra
これは私のためにうまくいきません。私が渡した日付が正しい現地時間であっても、ファイル作成時間はUTC時です。CE版はUTCに作成されたファイルを変更しているようです。 – JPM
[DllImport("coredll.dll")]
private static extern bool SetFileTime(string path,
ref long creationTime,
ref long lastAccessTime,
ref long lastWriteTime);
public void SetFileTimes(string path, DateTime time)
{
var ft = time.ToFileTime();
SetFileTime(path, ref ft, ref ft, ref ft);
}
答えctacke
から適合フラー実装は、上記提供しthis StackOverflow questionです。あなたが必要な場合は、最後の書き込み時間を読み取るために(.NET Compact Frameworkの中に露出している)System.IO.File.GetLastWriteTime
を使用することができます
// Some Windows constants
// File access (using CreateFileW)
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint GENERIC_READ_WRITE = (GENERIC_READ + GENERIC_WRITE);
public const int INVALID_HANDLE_VALUE = -1;
// File creation (using CreateFileW)
public const int CREATE_NEW = 1;
public const int OPEN_EXISTING = 3;
// File attributes (using CreateFileW)
public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;
// P/Invokes
[DllImport("coredll.dll", SetLastError = true)]
public static extern IntPtr CreateFileW(
string lpFileName,
uint dwDesiredAccess,
uint dwShareMode,
IntPtr pSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
IntPtr hTemplatefile);
[DllImport("coredll.dll", SetLastError = true)]
public static extern int CloseHandle(IntPtr hObject);
// Note: Create related P/Invokes to change creation or last access time.
// This one modifies the last write time only.
[DllImport("coredll.dll", EntryPoint = "SetFileTime", SetLastError = true)]
private static extern bool SetFileWriteTime(
IntPtr hFile,
IntPtr lpCreationTimeUnused,
IntPtr lpLastAccessTimeUnused,
ref long lpLastWriteTime);
// Open a handle to the file you want changed
IntPtr hFile = CreateFileW(
path, GENERIC_READ_WRITE, 0,
IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero);
// Modify the last write time and close the file
long lTimeNow = DateTime.Now.ToFileTime();
SetFileWriteTime(hFile, IntPtr.Zero, IntPtr.Zero, ref lTimeNow);
CloseHandle(hFile);
注:私は、これは誰かに役立ちたいと考えています。
いつでも*ファイルに書き込むことができます。それはそれを更新する良い方法です。他の何かが少し不誠実な、あなたは同意しないでしょうか? –
私は同意します...しかし、元の日付をFTPからダウンロードしたファイルに書き込む必要があります。 – fra