![]() |
Falsche Dateigröße über SHGetDataFromIDList
Hi,
mit dem alten VListView Demo aus D7 ist es mir gelungen die Flash-Karte einer eingebundenen Digitalkamera auszulesen. Die Flash-Karte ist aber nur als PTP-Laufwerk ohne LW-Buchstabe im Betriebssystem eingebunden. Trotzdem zeigt mir die alte Demo via ShellAPI die Verzeichnisstruktur und listet alle Bilder der Karte auf. Allerdings bleibt die Dateigröße immer bei 0 kb. Ursächliche Methode SHGetDataFromIDList. Ich verwende D7 auf Win7,x64. Bei den logischen LW funktion. das aber. Woran liegt es ? Hier der Code Block:
Code:
procedure TForm1.CheckShellItems(StartIndex, EndIndex: Integer);
function ValidFileTime(FileTime: TFileTime): Boolean; begin Result := (FileTime.dwLowDateTime <> 0) or (FileTime.dwHighDateTime <> 0); end; var FileData: TWin32FindData; FileInfo: TSHFileInfo; SysTime: TSystemTime; I: Integer; LocalFileTime: TFILETIME; c : Cardinal; begin //Here all the data that wasn't initialized in PopulateIDList is //filled in. for I := StartIndex to EndIndex do begin if ShellItem(I)^.Empty then with ShellItem(I)^ do begin FullID := ConcatPIDLs(FPIDL, ID); ImageIndex := GetShellImage(FullID, ListView.ViewStyle = vsIcon, False); //File Type SHGetFileInfo( PChar(FullID), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME or SHGFI_PIDL ); TypeName := FileInfo.szTypeName; //Get File info from Windows FillChar(FileData, SizeOf(FileData), #0); [B]SHGetDataFromIDList[/B]( FIShellFolder, ID, SHGDFIL_FINDDATA, @FileData, SizeOf(FileData) ); //File Size, in KB Size := (FileData.nFileSizeLow + 1023 ) div 1024; if Size = 0 then Size := 1; c := FileData.nFileSizeHigh; //Modified Date FillChar(LocalFileTime, SizeOf(TFileTime), #0); with FileData do if ValidFileTime(ftLastWriteTime) and FileTimeToLocalFileTime(ftLastWriteTime, LocalFileTime) and FileTimeToSystemTime(LocalFileTime, SysTime) then try ModDate := DateTimeToStr(SystemTimeToDateTime(SysTime)) except on EConvertError do ModDate := ''; end else ModDate := ''; //Attributes Attributes := FileData.dwFileAttributes; //Flag this record as complete. Empty := False; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz