Autor Beitrag
JRegier
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Di 11.10.05 13:04 
Hi, wie erhalte ich mit:

ausblenden Delphi-Quelltext
1:
2:
IdHTTP.Head(URL);
ImageDate := IdHTTP.Response.LastModified;


das richtige Datum einer Bilddatei?
Muß ich sonst noch Befehle zwischenschieben damit das funktioniert?

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Di 11.10.05 16:19 
So funktioniert das doch:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var zeit : tdate;
begin
idhttp1.Head(edit1.text);
zeit:=idhttp1.Response.LastModified;
label1.Caption:=datetostr(zeit);
end;

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Di 11.10.05 21:09 
user profile iconHansi@OMG hat folgendes geschrieben:
So funktioniert das doch:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var zeit : tdate;
begin
idhttp1.Head(edit1.text);
zeit:=idhttp1.Response.LastModified;
label1.Caption:=datetostr(zeit);
end;


Ja habe ich hier den Fehler vermutet! Also ich setze mit SetFileDate auf das Datum was ich ausgelesen habe
aber der ist einfach das aktuelle Datum, also wann die Datei heruntergeladen wurde!

FileStream := TFileStream.Create(FileName, fmCreate);
und lade mit
IdHTTP.Get(URL, FileStream);
FileStream.Free;

SetFileDate(FileName, IdHTTP.Response.LastModified); // die SetFileDate ist eine Funktion die ich mir wo kopiert habe und die benutzt FileSetDate aus SysUtils

Aber das Datum ist dennoch das Erzeugungsdatum! Ich möchte das das Datum gleich wie im Web der Datei gesetzt wird und
bei einer Änderung neu laden!
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Mi 12.10.05 07:07 
Ich weis nicht, ob Windows das zulässt. Außerdem ist soetwas zu Waage, es besteht einfach immer die Möglichkeit, dass jemand die Datei ändert. Deswegen würde ich dir Vorschlagen, die runtergeladen Bilder zu belassen und die Werte zugehörig zum Dateinamen in eine seperate Datei zu speichern.

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Mi 12.10.05 08:05 
user profile iconHansi@OMG hat folgendes geschrieben:
Ich weis nicht, ob Windows das zulässt. Außerdem ist soetwas zu Waage, es besteht einfach immer die Möglichkeit, dass jemand die Datei ändert. Deswegen würde ich dir Vorschlagen, die runtergeladen Bilder zu belassen und die Werte zugehörig zum Dateinamen in eine seperate Datei zu speichern.


Ah die Idee hate ich auch als ich die Worte las Windows läßt das nicht zu! Vielen Dank für Tip!
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mi 12.10.05 08:45 
user profile iconHansi@OMG hat folgendes geschrieben:
Außerdem ist soetwas zu Waage

du meinst wohl "vage" :P

@JRegier: Suche im MSDN SETFILETIME

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 14.10.05 06:47 
user profile iconretnyg hat folgendes geschrieben:
user profile iconHansi@OMG hat folgendes geschrieben:
Außerdem ist soetwas zu Waage

du meinst wohl "vage" :P

@JRegier: Suche im MSDN SETFILETIME


Ich habe es jetzt so und der setzt mir ein Datum für das Jahr 2051 :shock:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
function TMainForm.FieldGetWebData(const URL: String): String;
var HTTP : TIdHTTP;
    Mem : TFileStream;
    S : String;
    FE : Boolean;
    D : TDateTime;
begin
    S := ApplicationDirectory+'Temp\'+ExtractFileNameFromURL(URL);
    FE := FileExists(S);
    HTTP := TIdHTTP.Create(Self);
    HTTP.Head(URL);
    D := HTTP.Response.LastModified;
    if(not FE) or ((FE) and (FileAge(S) <> DateTimeToFileDate(D)))then
    begin
    Mem := TFileStream.Create(S, fmCreate);
    HTTP.Get(URL, Mem);
    Mem.Free;
    SetFileTime(S, D);
    end;
    HTTP.Free;
    Result := S;
end;

function DTimeToFTime(dTime: TDateTime): TFileTime;
var t: Integer; ft: TFileTime;
begin
  t:=DateTimeToFileDate(dTime);
  DosDateTimeToFileTime(LongRec(t).Hi, LongRec(t).Lo, ft);
  LocalFileTimeToFileTime(ft, Result);
end;

procedure SetFileTime(FileName: String; dTime: TDateTime);
var hFile: THandle;
    Creation, LastAcces, LastWrite: TFileTime;
begin
  hFile:=CreateFile(PChar(FileName), Generic_Write, 0nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

  Creation:=DTimeToFTime(dTime);
  LastAcces:=DTimeToFTime(dTime);
  LastWrite:=DTimeToFTime(dTime);
  Windows.SetFileTime(hFile, @Creation, @LastAcces, @LastWrite);

  CloseHandle(hFile);
end;


Also ich wollte das halt wenn das gleiche Datum wie im Web das er nicht neu ladet! Aber der ladet noch immer
neu! Was mache ich nur falsch?
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 14.10.05 07:53 
Ich habe nun mit einer anderen Procedur das Datum gesetzt! Aber habe nun doch immer das Datum 30. Dezember 1899 02:00:00 habe
also nach:
IdHTTP.Head(URL);
Date := IdHTTP.Response.LastModified;
ShowMessage(DateTimeToStr(Date));
gibt mir auch das Datum zurück!

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
function SetFileDateTime(FileName: string; NewDateTime: TArrayDateTime; DateChanges : TDateChangeTypes): Boolean;
var
  FileHandle: Integer;
  FileTime: TFileTime;
  LFT: TFileTime;
  LST: TSystemTime;
  I : TDateChangeType;
begin
  Result := False;
  FileHandle:=-1;
  for I:= D_CREATE to D_WRITE do
  begin
  if(not (I in DateChanges))then
  Continue;
        try
          DecodeDate(NewDateTime[Ord(I)], LST.wYear, LST.wMonth, LST.wDay);
          DecodeTime(NewDateTime[Ord(I)], LST.wHour, LST.wMinute,  LST.wSecond, LST.wMilliSeconds);
          if SystemTimeToFileTime(LST, LFT) then
          begin
            if LocalFileTimeToFileTime(LFT, FileTime) then
            begin
              FileHandle := FileOpen(FileName, fmOpenReadWrite or
                fmShareExclusive);
              case i of
                D_CREATE: if SetFileTime(FileHandle, @FileTime, nilnil ) then
                      Result := Result and True;
                D_ACCESS: if SetFileTime(FileHandle, nil, @FileTime, nil ) then
                      Result := Result and True;
                D_WRITE : if SetFileTime(FileHandle, nilnil, @FileTime ) then
                      Result := Result and True;
              end;
            end;
          end;
        finally
          FileClose(FileHandle);
        end;
   end;
end;
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 14.10.05 08:17 
Jetzt stellt sich noch ein Problem damit heraus! Wenn ich die SetFileDateTime procedure aufrufe kann das Bild danach nicht geöffnet
werden also ich prüfe mit FileExists ob Datei vorhanden wenn ja dann lade das aus dem Web heruntergeladene Bild!
Und der meldet False, obwohl ich FileClose in SetFileDateTime procedur aufrufe!
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Fr 14.10.05 13:03 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
program Project1;
{$APPTYPE CONSOLE}
uses windows,sysutils;


function _setFileDate(filename : string; time:Tdatetime): boolean;
var
  hFile: tHandle;
  ttime: TFileTime;
  tsystime: TSystemTime;
begin
  hFile := FileOpen(FileName, fmOpenWrite or fmShareDenyNone);
  if hFile <> INVALID_HANDLE_VALUE then begin
    DateTimeToSystemTime(time, tsystime);
    SystemTimeToFileTime(tsystime, ttime);
    setfiletime(hFile,@ttime, @ttime, @ttime);
    FileClose(hFile);
    result := true;
  end
  else result := false;
end;


begin
   _setFileDate('C:\129.mp3', encodedate(1999,9,9));
end.

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Fr 14.10.05 20:31 
Das mit dem Setzen des Dateidatums funktioniert ja!
Aber der Rückgabewert von der Indy Componente IdHTTP ist immer
von LastModified 30.12.1899 02:00:00 das ist das Problem!

Also nochmal:
ausblenden Delphi-Quelltext
1:
2:
3:
HTTP := TIdHTTP.Create(Self);
HTTP.Head(URL);
ShowMessage(DateTimeToStr(HTTP.Response.LastModified)); // 30.12.1899 02:00:00 immer
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Sa 15.10.05 03:37 
user profile iconJRegier hat folgendes geschrieben:
Das mit dem Setzen des Dateidatums funktioniert ja!
Aber der Rückgabewert von der Indy Componente IdHTTP ist immer
von LastModified 30.12.1899 02:00:00 das ist das Problem!

Also nochmal:
ausblenden Delphi-Quelltext
1:
2:
3:
HTTP := TIdHTTP.Create(Self);
HTTP.Head(URL);
ShowMessage(DateTimeToStr(HTTP.Response.LastModified)); // 30.12.1899 02:00:00 immer

30.12.1899 02:00:00 = 0
es wird also kein wert von der indy kompo geliefert - pech gehabt

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JRegier Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1268

Win XP Home, Prof, 2003 Server
D6 Enterprise
BeitragVerfasst: Sa 15.10.05 08:06 
user profile iconretnyg hat folgendes geschrieben:

30.12.1899 02:00:00 = 0
es wird also kein wert von der indy kompo geliefert - pech gehabt


Ja ResponseText liefert mir: "200 OK" also da wahrscheinlich der Server die Daten nicht rausrückt!

Na gut dann müßte es doch andere Möglichkeit geben Bilder Up To Date halten?
Ich denke mal an Multitasking! Also wenn ich ein Task mit niedriger Priorität habe
wird der den weniger das Netzwerk auslasten als wenn der eine Normal Priorität
hat?
Wenn es hier kein unterschied gibt und es zu einem zu hohen Traffic führt so
das es stört dann müßte ich unter Optionen einstellungen haben wie
Mittagspause und ein Button jetzt Pause also lade Bilder neu,
(habe ich eingentlich ein Logof Button)
aber dann könnte wenn einer einen Volumentarif hat zu hohe Kosten entstehen!
Also dementsprechend Optionen zur Verfügung stellen: ein Bild neu laden z.B.
wenn er die Info bekommt Bilder wurden bearbeitet!
Man könnte es wie bei Opera machen Optionen nach X Tagen neu laden!