2011-04-15 2 views
2

FileSystemInfo.LastWriteTimeプロパティはCFでのみ読み込まれます。 その日付を変更する別の方法はありますか?Compact FrameworkのLastWriteDateファイルを変更します。

+0

いつでも*ファイルに書き込むことができます。それはそれを更新する良い方法です。他の何かが少し不誠実な、あなたは同意しないでしょうか? –

+0

私は同意します...しかし、元の日付をFTPからダウンロードしたファイルに書き込む必要があります。 – fra

答えて

4

P/Invoke SetFileTime

EDIT

これらの線に沿って何か(警告:テストされていない)ここ

+0

素晴らしい、ありがとう – fra

+0

申し訳ありません... FILETIMEのCLRタイプは何ですか?この署名は正しいですか? [DllImport( "coredll.dll")] パブリック静的extern bool SetFileTime(IntPtrパス、ref long?creationTime、ref long?lastAccessTime、ref long?lastWriteTime); – fra

+0

これは私のためにうまくいきません。私が渡した日付が正しい現地時間であっても、ファイル作成時間はUTC時です。CE版はUTCに作成されたファイルを変更しているようです。 – JPM

0
[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); 

注:私は、これは誰かに役立ちたいと考えています。

関連する問題