16. februar 2005 - 14:52Der er
17 kommentarer og 2 løsninger
Dato problem
Jeg har hentet en dato function fra http://eksperten.dk/spm/407671, men når jeg bruger den får jeg en dato der hedder 30-12-1899, hvordan kan det være?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
hvad er det du vil, hvis det er fildato'er, så brug findfirst og kig på den TSearchRec du får tilbage, den indeholder alle datoer, create lastwrite osv.
The faReadOnly constant has the same name as the enumerated value that is defined by the TFieldAttribute type. If both the SysUtils and the Db units are used in your source files, you must disambiguate by specifying the unit to qualify the use of faReadOnly. That is, write SysUtils.faReadOnly (Delphi) or SysUtils::faReadOnly (C++).
To test for an attribute, combine the value of the Attr field with the attribute constant with the and operator. If the file has that attribute, the result will be greater than 0. For example, if the found file is a hidden file, the following expression will evaluate to true:
(SearchRec.Attr and faHidden) <> 0. (SearchRec.Attr & faHidden) != 0.
----->>>>> Time contains the time stamp of the file. It can be converted to a TDateTime value using FileDateToDateTime. <<<<<-------------------
Size contains the size of the file in bytes.
Name contains the base file name, including extension.
FindHandle is an internal handle used to track find state.
FindData (Windows only) contains additional information such as the file creation time, last access time, and both the long and short file names.
Jeg har prøvet følgende: Jeg har prøvet følgende: if (FileDateToDateTime(sr.FindData.ftCreationTime) = DateTimePicker1.Date) then Her får jeg nedenstående fejl, når jeg compilere programmet [Error] Main.pas(60): Incompatible types: 'Integer' and '_FILETIME'
if (FileDateToDateTime(FileAge(Sr.Name)) = DateTimePicker1.Date ) then får jeg følgende fejl: Invalid argument to date encode når jeg kører programmet.
procedure TForm1.Button1Click(Sender: TObject); var sr : TSearchRec; Save_Cursor : TCursor; PDF, TIF : Integer; bibliotek, FileName : String;
begin PDF := 0; TIF := 0; Bibliotek := 'c:\data\'; FileName := '*.*';
if findfirst(bibliotek+FileName, faAnyFile, sr) = 0 then begin repeat if (sr.name<>'.') and (sr.name<>'..') then begin if (CompareValue(FileDateToDateTime(Sr.Time),DateTimePicker1.Date,0.001) = 0) AND ((copy(sr.Name, Length(sr.Name)-3, 4) = '.TIF') or (copy(sr.Name, Length(sr.Name)-3, 4) = '.tif')) Then inc(TIF); end; until findNext(sr)<>0; FindClose(sr); end; end;
Jeg har 21 tif filer i biblioteket og når jeg sætter DateTimePicker1 dato til 11-02-2005 og trykker på knappen, finder den ingen tif filer, selvom der ligger 2 tif filer med den dato.
Hvis jeg undlader linien: if (CompareValue(FileDateToDateTime(Sr.Time),DateTimePicker1.Date,0.001) = 0) AND finder den 21 tif filer.
Mit forslag var naturligvis ikke fri for fejl... CompareValue = 0 er når de er ens. Jeg har ikke testet nedenstående kode (så meget får man ikke for 15 points), så det kan du gøre.
Found := FindFirst(Directory + FileName, faAnyFile, sr) = 0; try while Found do begin if sr.name[1] <>'.' then begin Extension := AnsiUpperCase(ExtractFileExt(sr.Name)); CreateDate := FileDateToDateTime(Sr.Time);
if (CreateDate >= aCreationDate) then begin if AnsiSameStr(Extension,'.TIF') then inc(aTIFCount); if AnsiSameStr(Extension,'.PDF') then inc(aPDFCount); end; end; Found := FindNext(sr) = 0; end; finally FindClose(sr); end; end;
Resultatet sammenligner med den dato hvor filen sidst blev modificeret. Hvis du skal have fat i oprettelsesdatoen, så må du nok til at lege med GetFileDate()
I øvrigt kan du slette CreateDate : TDateTime i var-listen (og sikkert også SaveCursor).
Havde misforstået opgaven. Troede at det var alle filer nyere end datoen. Du har løst det på en ret grim måde. Prøv denne her, der fjerner tid-delen fra datoen:
if trunc(CreateDate) = trunc(aCreationDate) then...
TDateTime er en double, hvor heltalsdelen er antallet af dage og decimaldelen er antallet af milisekunder siden dagens start. Med trunc skærer man decimaldelen væk og vupti, så har man antallet af dage siden Kong Volmer.
hrc >> måde ja og nej, hvis delphi en dag ændre deres TDateTime format vil DateOF() sikkert være den måde der Stadig virker og Truc() den der er fucked
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.