07. november 2004 - 14:15Der er
18 kommentarer og 2 løsninger
Indsætte data midt i en fil.
Kan det passe at jeg ikke kan indsætte data midt i en fil uden at skulle skrive filen helt om? Jeg vil f.eks indsætte en byte midt i en 100 mb stor fil. Hvordan?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hvis rettelsen ligger i første del af filen, skal man jo skrive det hele om. En løsning er vel at arbejder med mange små filer. Dette giver mig dog en langsommer læsning af hele indholdet.
Det mest oplagte var nok at skifte til en database.
Mange små filer og et system til at holde styr på hvor hvad er begybder jo at ligne en mini database.
Du kan jo eventuelt kigg epå en embedded database altså en database hvor database koden er i samme process som dit program så brugeren ikke skal starte en database.
> Hvis rettelsen ligger i første del af filen, skal man jo skrive det hele om.
Alternativt kan du tilføje det i slutningen af filen, og så have et index der fortæller hvilken rækkefølge stumperne kommer i. Og hvis du så sletter noget midt i filen, kan du blot lade pladsen stå. Når du så senere indsætter noget, kan du evt. placere det der.
Sådan fungerer filsystemet på din harddisk. Harddisken kan betragtes som én stor fil, eller en partition på en harddisk kan betragtes som én stor fil. Og problemet med filer der vokser, er præcist det samme, når en anden fil kommer lige bagefter.
> Problemet er at det jeg skal gemme er meget lidt. Hvis det ikke kan være der, er det ligegyldigt hvor lidt det er. ;-)
Jeg er enig med arne_v: Det lyder som om du har behov for en eller anden form for database-manager, og det er der ikke den store grund til at lave selv.
Jeg kan jo lige så godt bruge Jer, når jeg nu har fat i Jer. :)
Hvis vi forstiller os at vi har en fil bestående af, 32 bytes md5 sum + 2 bytes integer på hver linie. Jeg lader dem ligge sorteret, så jeg hurtigt kan slå op hvilken værdi en md5 sum har. Når jeg nu skal indsætte et nyt, hvordan gør jeg dette, efter det vi har snakket om filer? Hvad gør databaser når de opdateres der indexes? Laver de huller (tomme rækker) i filen?
Allerede ved 30.000 objekter vil filen fylde 1 MB, og så bliver en fuld genskrivning for langsom!
Hvis du IKKE vil bruge en db, kan du jo kigge på RandomAccessFile, her skulle du langt kan ad vejen kunne opnå det du ønsker. Den bygges op i en record lignende struktur og du kan redigere et hvilket som helst sted i filen, du skal bare selv holde styr på hvad og hvor.
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.