From: Erik B. <eb...@us...> - 2006-09-18 16:09:25
|
Update of /cvsroot/gexperts/gexperts/unstable/Comps In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv29901/Comps Modified Files: GpStructuredStorage.pas Log Message: Version 1.10c minor root path parsing update from Primoz Index: GpStructuredStorage.pas =================================================================== RCS file: /cvsroot/gexperts/gexperts/unstable/Comps/GpStructuredStorage.pas,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- GpStructuredStorage.pas 20 Jul 2006 10:09:45 -0000 1.7 +++ GpStructuredStorage.pas 18 Sep 2006 16:09:19 -0000 1.8 @@ -32,11 +32,14 @@ Author : Primoz Gabrijelcic Creation date : 2003-11-10 - Last modification : 2006-07-20 - Version : 1.10b + Last modification : 2006-09-17 + Version : 1.10c </pre>*)(* History: - 1.10b: + 1.10c: 2006-09-17 + - FileInfo['/'] was not working. Fixed. (FileInfo['/'] is equivalent to FileInfo[''].) + - Backslashes were not converted to slashes in FileInfo. Fixed. + 1.10b: 2006-07-20 - Memory leak fixed: Internal objects representing folders were never freed. 1.10a: 2006-01-30 - Fixed TGpStructuredStorage.Delete to not unnecessary auto-create parent folders. @@ -106,6 +109,10 @@ Classes, GpLists; +const + //:Structured storage path delimiter. + CFolderDelim = '/'; + type {:Structured storage exception class. @since 2004-01-08 @@ -211,7 +218,6 @@ CBlockSize = 1024 {bytes}; CFATEntriesPerBlock = CBlockSize div 4; - CFolderDelim = '/'; CSignature = 'GpStructuredStorage file'#13#10#26#0; //Numerical attribute representation. When changing, modify methods NumToAttributes and AttributesToNum. @@ -251,7 +257,7 @@ [0:2] FILE_INFO: - [file length:2] + [file name length:2] [file name:1..65535] [file attributes:ATTRIBUTES:4] [file length:4] // 4 GB per file @@ -1956,7 +1962,7 @@ @since 2004-02-14 } procedure TGpStructuredFAT.Resolve(firstBlock: cardinal; offset: integer; - var block, blockOffset: cardinal); + var block, blockOffset: cardinal); begin block := firstBlock; blockOffset := offset; @@ -2524,26 +2530,32 @@ {:Returns file information interface @since 2004-02-18 -} +} function TGpStructuredStorage.GetFileInfo(const fileName: string): IGpStructuredFileInfo; var folder : string; name : string; + normName : string; stgFolder: TGpStructuredFolder; begin if fileName = '' then Result := CreateFileInfo(self, gssRootFolder, '') else begin - Result := nil; - if FolderExists(fileName) then - SplitFileName(StripTrailingDelimiter(fileName), folder, name) - else - SplitFileName(fileName, folder, name); - stgFolder := DescendTree(folder); - try - if stgFolder.ObjectExists(name) then - Result := CreateFileInfo(self, stgFolder, name); - finally ReleaseFolder(stgFolder); end; + normName := NormalizeFileName(fileName); + if normName = CFolderDelim then + Result := CreateFileInfo(self, gssRootFolder, '') + else begin + Result := nil; + if FolderExists(normName) then + SplitFileName(StripTrailingDelimiter(normName), folder, name) + else + SplitFileName(normName, folder, name); + stgFolder := DescendTree(folder); + try + if stgFolder.ObjectExists(name) then + Result := CreateFileInfo(self, stgFolder, name); + finally ReleaseFolder(stgFolder); end; + end; end; end; { TGpStructuredStorage.GetFileInfo } |