20. november 2001 - 10:57Der er
14 kommentarer og 1 løsning
Text ind i en fil
Jeg skal have lagt nogle linjer ind i en text fil. Det er i sig selv ikke ret svært, problemet er bare at vi snakker om en del linjer! og med win98 vil den ikke lave filen størrer end en forud (af win98)bestemt størrelse.
Det er således ikke W98 der har et problem, men din memobox. Prøv at kigge på kommandoen (og eksemplet for) \"Append\" proceduren.
<SNIP> var
f: TextFile; begin if OpenDialog1.Execute then begin { open a text file } AssignFile(f, OpenDialog1.FileName); Append(f); Writeln(f, \'I am appending some stuff to the end of the file.\'); { insert code here that would require a Flush before closing the file } Flush(f); { ensures that the text was actually written to file } CloseFile(f); end;
Pelle >> Det ER windows 98, eler rettere dens memmory håndtering, og hele den gamle snak, med kode sekmenter og alt det det .... Dele af Win98\'s kærne er stadig 16 Bit !
Jeg har i test-øjemed rodet med BlockRead/BlockWrite og denne har ingen problemer hverken med størrelse eller hastighed, men har ikke specifik testet om Append/WriteLn har problemer (dog kan jeg IKKE forestille mig at det skulle give problemer).
Jeg er ret sikker på at en Windows edit box (som f.ex. TMemo) kun kan indeholde en begrænset mængde i Win98, hvor den i NT og 2K kun er begrænset af RAM.
unclebug >> Du har næsten ret .. En TMemo har samme begrænsninger som notepad .. På WIN98 er der vist omkring 64 kb, hvor i mod det på NT er 2GB. For at komme ud over probelmet på 98 kan du bruge en Richedit.
Problemet på NT kan også læses ved at skifte dit OS ud med 64-Bits udgaven af XP :-)
Problemet er måske at filen skal åbnes før den kan skrives til... Man burde næsten allokere pladsen i filen, direkte på disk - og så skrive direkte til nogle tomme sektorer på disken... Jeg kan se om jeg kan finde noget kode til dette.
jenshertz> Dels lyder \"direkte-sektore-access\" som fuldstændig overkill, og hvis der blot er tale om \"en simpel tekstfil\" burde det ikke være nødvendigt at \"afsætte splads\".
Problemet er Memo\'s SaveToFile under W98 er \"begrænset\", og dette kan nemt løses ved at man append\'er til filen og skriver linierne en af gangen med WriteLn (en BlockWrite kan sikkert også bruges til at tilføje \"Memo.Text\" i et hug).
Prøv komponenten TStringList til at ændre med... Jeg bruger den selv meget - men den kan kun have noget i stil med 65000 linjer - så jeg ved ikke om det er nok.
Eks. :
procedure WriteText(Text,Fil: String; Linje: Integer); var List: TStringList; begin List:=TStringList.Create; List.LoadFromFile(Fil); List.Insert(Linje,Text); // Eller omvendt... List.SaveToFile(Fil); List.Free; end;
Du kan også benytte \"CreateFileMapping\" og \"MapViewOfFile\", fra win32 biblioteket.
Dette gør at du kan åbne et view på en fil af en vilkårlig størrelse og så flytte dit view på filen ind i ram. På lidt den sammen måde som et vindue med scrollbars.
Brug en RichEdit i stedet for en TMemo så er du overe alle dine problemer !
Jens B
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.