Lagring i Compound File-format
lxCompoundFile läser och skriver Compound File Binary-containrar via Pascal-strömmar, inklusive nästlade lagringsscope, MiniFAT-nyttolaster och länkade DIFAT-sektorer; inbyggda Classic BIFF8-arbetsboks-API:er använder den backenden på Linux och macOS
Använd vanliga arbetsboksanrop till Open och SaveAs för kalkylbladsarbete; de lägre API:erna nedan är användbara för att inspektera nästlade strömmar, bygga containrar och bevara lagringsmetadata
Läs eller bygg en container
TlxCompoundFile.LoadFromStream(AStream, AOwnsStream) läser in katalog- och allokeringsmetadata; AOwnsStream är False som standard, och den underliggande strömmen måste finnas tillgänglig medan dess innehåll extraheras
CreateNew(AStream, AOwnsStream) förbereder en ny container, AddStorage och AddStream köar dess innehåll, och Save skriver en version 3-container med de DIFAT-utökade sektorer som krävs
| Medlem | Beteende |
|---|---|
RootIndex | Rotkatalogpostens identitet, som används som förälder för lagring och strömmar på toppnivå |
AddStorage(Name, ParentIndex) | Köar en nästlad lagring och returnerar dess katalogidentitet för att lägga till barn |
AddStream(Name, Data) | Köar en byteström på rotnivå |
AddStream(Name, Data, ParentIndex) | Köar en byteström i den valda förälderns scope och returnerar dess identitet |
OpenStream(Name), OpenStream(Name, ParentIndex) | Extraherar en rot- eller scope-ström till en ägd TlxCfbStream; en saknad ström returnerar nil |
OpenEntryStream(Index) | Extraherar en katalogström via identitet; en ogiltig eller icke-strömpost returnerar nil |
HasStream(Name), HasStream(Name, ParentIndex) | Testar om en ström finns i roten eller i den valda förälderns scope |
FindStorage(Name, ParentIndex) | Returnerar en lagringsidentitet i den valda föräldern, eller -1 när ingen matchande lagring finns |
EntryCount, Entries(Index) | Inspekterar inlästa katalogposter; indexen är nollbaserade och måste vara giltiga |
SetEntryMetadata(Index, Entry) | Kopierar endast klass-ID, tillståndsbitar och tidsstämplar till en giltig köad post eller till roten; strukturella identiteter och nyttolaster lämnas oförändrade |
TlxCfbEntry-posten exponerar Name, EntryType, StartSector, Size, LeftSibling, RightSibling, Child och härledd ParentIndex; kataloglänkar är index, och -1 betecknar en frånvarande identitet
Dess metadatafält är ClassID, StateBits, CreationTime och ModificationTime; tidsstämplar behåller råa FILETIME-tick från 1601-epoken UTC i stället för ett lokalformaterat datum
TlxCfbEntryType omfattar cfbEmpty, cfbStorage, cfbStream och cfbRoot; TlxCfbStream exponerar Name, Size, Data, Read, Seek och CopyTo
Extraherade strömmar äger fristående byte och måste frigöras av uppringaren; korruption, ofullständiga kedjor, ogiltigt ägarskap och cykliska katalog- eller allokeringsgrafer avslås i stället för att returnera avklippta nyttolaster
lxCfbCompareNames(A, B) tillämpar Compound File Binary:s längd-först-ordning med fast enkel BMP-versalmappning; dubblettnamn är avgränsade till sin förälder, och identiska namn i separata nästlade lagringar förblir åtskilda
Inbyggda lagringsgränssnitt
På icke-Windows-mål tillhandahåller lxOLE den lagringsgränssnittsimplementering som Classic-arbetsboksladdning och -sparning kräver; dess IStorage, IStream och IEnumStatStg behåller uttryckligt gränssnittsägarskap och ett fristående inbyggt containertillstånd
| Fabrik eller hjälpare | Kontrakt |
|---|---|
XlsOpenCompoundStorage(Source, Storage) | Läser in en skrivskyddad container med början vid strömoffset noll |
XlsOpenCompoundStorage(Source, Start, Storage) | Läser in containern med början vid det uttryckliga icke-negativa offsetet |
XlsCreateCompoundStorage(Storage) | Skapar skrivbar inbyggd lagring med nästlade scope och strömmar |
XlsWriteCompoundStorage(Storage, Destination) | Serialiserar den inbyggda rotlagringen till den angivna strömmen; främmande implementeringar och icke-rotlagring avslås |
XlsFreeCompoundStorageName(Name) | Frigör inbyggda namn som returnerats av lagringsstatistik eller uppräkning; nil godtas |
Fabrikerna returnerar HResult; testa Succeeded(Result) innan det returnerade gränssnittet används, och släpp gränssnittsreferenserna när du är klar
Mutation i skrivskyddat läge misslyckas, klonade strömkursors behåller oberoende positioner, och nästlade kopior bevarar förälderidentitet och stödd metadata; direkt serialisering tillhandahåller inte det högre transaktionskontraktet för arbetsboksdestinationer
Kanoniska arbetsboksidentifierare
XlsIdentifierKeyText(const A: WideString): WideString i lxStandard returnerar UTF-16-textrepresentationen av den befintliga fasta Unicode-identifierarnyckeln, vilket låter Classic:s lagring av definierade namn dela kanonisk likhet med andra arbetsboksmotorer
Den här nyckelrepresentationen är till för identitet och uppslagning, inte för visad stavning; författade namn lämnas oförändrade, och CFB-katalogjämföraren behåller sin separata, av formatet föreskrivna ordning
Se Free Pascal-stöd för inbyggda byggkrav och det verifierade BIFF8-arbetsbokskontraktet, samt Classic-kryptering för stödd kryptering och klartextbeteende i egenskapsströmmar