Results 1 to 15 of 15

Thread: ruimte op de harde schijf claimen (zonder de bytes daarvoor te hebben)

  1. #1

    ruimte op de harde schijf claimen (zonder de bytes daarvoor te hebben)

    Hallo

    Als je het programma Massdownloader (cht het allerbeste download-hulpje)
    gebruikt en een programma van laten we zeggen 180 MB begint te down-
    loaden, zie je meteen bij het starten van de download zelf dat het aantal
    beschikbare ruimte op je harde schijf met dezelfde 180 MB wordt lager gezet.
    Dit dus, terwijl het bestand van 180 MB zich helemaal nog nich op je harde
    schijf bevindt.

    Maar hoe doen ze dat nou?

    Bedankt

    Omer

  2. #2
    Weet je zeker dat het niet misschien ergens anders staat in bijvoorbeeld een temp directory?
    We adore chaos because we like to restore order - M.C. Escher

  3. #3
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Wat deze applicaties doen is het bestand geheel vullen, maar niet met de daadwerkelijke data. Je kan bijvoorbeeld het bestand vullen met #0 karakters, en daarna de delen die gedownload zijn overschrijven. Je ziet dit voornamelijk bij download managers die meerdere connecties maken, omdat die in meerdere delen van het bestand bezig zijn tegelijkertijd; dat wordt dan iets lastiger als je de tussenruimte niet alvast reserveerd... veel slims gebeurd er volgens mij in ieder geval niet, gewoon vullen met dummy data
    Qui custodiet ipsos custodes

  4. #4
    En er is een winapi die je zo'n bestand gevult met #0 snel en efficient kan laten maken. Ik kan alleen even niet op de naam komen.
    We adore chaos because we like to restore order - M.C. Escher

  5. #5
    Dat soort files heten 'sparse' files. Erg handig, maar het nadeel is dat je dan bij het downloaden alsnog het probleem kan krijgen dat je niet genoeg ruimte hebt.
    E-mule maakt trouwens ook gebruik van deze techniek, maar heeft een optie om het gebruik van sparse files uit te schakelen.
    1+1=b

  6. #6
    Hallo en bedankt voor jullie reacties.

    Ik ben een database-bestand aan het maken, waarbij de gebruiker bij het
    bereiken van een bepaalde grootte van het bestanf een signaal zal geven
    (bv 700 mb voor een CD of 4,7 gb voor een dvd of 8,5 gb voor een dl-dvd
    en de user dit gecreeerde bestand kan gaan branden.

    Het leek mij erg goed om vooraf een dezelfde hoevelheid ruimte op de
    bepaalde schijf te reserveren, opsdat bij het aanvullen van de data het
    database-bestand niet wordt 'vernield'.

    Dat met het aanmaken van en bestsand met dezelfde hoeveelheid
    bestanden lijkt mij voor dit project niet te doen, omdat het schier
    onmogelijk is eerst een enorm database-bestand aan te maken en
    dat bij het opvuleen ervan met records bij dit bestand eerst wat weg te
    halen en dan de gegevens op te slaan...

    Die bezegde API-Call zou ik graag willen weten, als jullie een beetje
    zoek- en 'herenner-werk' voor mij kunnen verrichten, zou het erg worden
    gewardeerd!

    Bedankt

    Omer

  7. #7
    Ik denk niet dat je ons begrepen hebt. Er wordt voorgesteld om het specifieke bestand alvast zo groot te maken en niet andere bestanden te gaan aanmaken.

    En zoals GolezTrol al opmerkt doen die sparse files net of ze zo groot zijn, maar zijn het op de schijf daardwerkelijk niet. Dus die zullen je niet helpen.
    We adore chaos because we like to restore order - M.C. Escher

  8. #8
    Hallo en bedankt

    Ik heb de vraag op de forum bij delphipages.com gesteld.
    Mocht ik daar wat sourcecode of een tip krijgen, zal ik jullie
    dit doorgeven

    Omer

  9. #9
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Gebruik filestreams om met het bestand te werken.

    1. Maak FileStream aan.
    2. Zet position op totale grootte - 1 byte
    3. Schrijf een 0 byte weg
    4. Zet position op 0

    Schrijf nu gegevens weg op dezelfde manier als altijd.

  10. #10
    Op zich kan ik dat laatste voorstel van Paul-Jan als een begin van iets
    goeds zien.

    Als ik dat doe, en de file op de harde schijf heb staan, kan ik dan
    de grootte van dit bestand 'kunstmatig' wijzigen (bijv van 0 bytes
    op 700 mb zetten)?

    Op delphipages werd er wel gereageerd, maar bruikbaar was dat niet...

    Omer

  11. #11
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,160
    Bovenstaande code (de 2e en 3e regel) maakt het bestand met de gewenste grootte aan.

  12. #12
    Na het aanmaken van het lege bestand, 'lock' je het bestand en dan overschrijf je het bestand weer. (Althans veel P2P applicaties locken de lege bestanden)

  13. #13
    Quote Originally Posted by Philips10
    Op zich kan ik dat laatste voorstel van Paul-Jan als een begin van iets goeds zien.
    Dat is dus gewoonweg het bestand vanaf het begin aanmaken met de gewenste grote. Er is niets kunstmatigs aan en is je al eens eerder voorgesteld.
    We adore chaos because we like to restore order - M.C. Escher

  14. #14
    Dat wat Paul-Jan opgaf heb ik uitgewerkt:

    Code:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var target: TFileStream;
        targetname: string;
        MyZero: char;
    begin
       targetname := 'c:\filler.bin';
       target := TFileStream.Create( targetname,  fmCreate or fmOpenWrite);
       try
        target.Size := 300000000; //292.969 bytes   
        target.Position := target.Size - 1;
        MyZero := '0';  //dummy;
        target.Write(MyZero, sizeof(MyZero));
       finally
         target.Free;
       end;
    end;
    Heb je in de eerste instantie verkeerd begrepen, Paul-Jan, sorry.

    ..,..het lijkt te werken, alleen is dit niet wat ik zoek.

    Ik werk aan een database-file, waarbij table-files door de database-
    engine wordt weggeschreven. Hiere kan ik dit niet gebruiken.
    Prachtig als je met binair files werkt, natuurlijk...

    Omer

  15. #15
    ik kan het niet gebruiken, omdat hier daadwerkelijk een goot file wordt
    aangemaakt, Als ik met binaire files zou werken, hoefde ik enkel met
    dit file 'c:\filler.bin' te werken.

    Toch hastikke bedankt allemaal

    Omer

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •