3

サーバーからファイルをダウンロードしています (バイトと lastwritetime 属性の DateTime のみを取得します)。データをダウンロードした後、ローカル マシンに新しいファイルを作成し、lastwritetime 属性を設定したいと考えています。このために、私は次の方法を使用しています:

procedure SetFileDate(const FileName: string; NewDate: TDateTime);
var
    FileDate, FileHandle: Integer;
begin
    try
        FileDate := DateTimeToFileDate(NewDate);

        FileHandle := FileOpen(FileName, fmOpenReadWrite or fmShareDenyWrite);
        if FileHandle > 0 then
            begin
                FileSetDate(FileHandle, FileDate);
                FileClose(FileHandle);
            end;
    except
        begin
            // ERROR Log
            err.Msg('FileReqThrd.SetFileDate');
        end;
    end;
end;

「NewDate」パラメーターには、サーバーから取得した DateTime を使用します。このようにサーバーから DateTime を変換して、有効な lastwritetime を取得しようとしました (WCF からデータを要求しているため、UTCDateTime に変換しています。WCF サービスからの手つかずのデータは TXSDateTime です):

TDateTime cloudFileDateTime := StrToDateTime(DateTimeToStr(cloudDownloadResult.FileCloudData.Lastwritetime.AsUTCDateTime));

しかし、最終的に、冬期に lastwritetime を持つファイルの lastwritetime 属性が -1h で間違っています。

私の問題を理解していただき、解決方法を教えていただければ幸いです。

よろしくお願いします

4

2 に答える 2

4

TFile.SetLastWriteTimeUtcこれを行う最も簡単な方法は、System.IOUtilsユニットから呼び出すことです。

TFile.SetLastWriteTimeUtc(FileName, 
    DateTimeUtc);

この関数が利用できない場合は、Win32 API 関数を使用してSetFileTimeください。

また、そのシナリオでは必要DateTimeToSystemTimeになります。SystemTimeToFileTime

于 2014-08-25T12:40:59.763 に答える