Results 1 to 14 of 14

Thread: FindFirst kan "Mijn documenten" niet vinden...

  1. #1
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536

    FindFirst kan "Mijn documenten" niet vinden...

    Na jarenlang weinig met Delphi gedaan te hebben, besloot ik een simpel backup programmaatje voor mijn vrouw te schrijven. (Omdat ze zelf nogal veel linkerhanden heeft...)
    Mijn opzet was om de D partitie te scannen op bestanden en dan te controleren of die al op de backup disk staan.
    Als een bestand er niet is, dan kopiëren, is het bestand er wel, dan controleren of het huidige bestand nieuwer is dan het bestand op de backup disk en zo ja, opnieuw kopiëren.
    Tot zover geen probleem. Ik had iets gemaakt en het werkte als een trein, alleen bleek de directory "Mijn documenten" overgeslagen te worden.
    Waarschijnlijk is de oorzaak vrij simpel, maar ik leg deze kwestie graag aan de deskundigen voor...
    Dit is grofweg de code die ik gebruik om de bestanden op de D partitie te scannen. Dat gaat op zich dus goed, maar niet bij "Mijn documenten".

    Meedenken en een mogelijke oplossing wordt gewaardeerd!

    Code:
    procedure TForm1.ListDir(Path:String; List:TListBox);
    {Path : string that contains start path for listing filenames and directories
     List : List box in which found filenames are going to be stored }
    var
    SearchRec:TsearchRec;
    Result:integer;
    S:string; { Used to hold current directory, GetDir(0,s) }
    begin
         try {Exception handler }
            ChDir(Path);
         except on EInOutError do
                begin
                     MessageDlg('Error occurred by trying to change directory',mtWarning,[mbOK],0);
                     Exit;
                end;
         end;
         if length(path)<> 3 then path:=path+'\';   { Checking if path is root, if not add }
         FindFirst(path+'*.*',faAnyFile,SearchRec); { '\' at the end of the string         }
                                                    { and then add '*.*' for all file     }
         Repeat
               if SearchRec.Attr=faDirectory then   { if directory then }
               begin
                    if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then { Ignore '.' and '..' }
                    begin
                         GetDir(0,s); { Get current dir of default drive }
                         if length(s)<>3 then s:=s+'\'; { Checking if root }
                         List.Items.Add(s+SearchRec.Name); { Adding to list }
                         ListDir(s+SearchRec.Name,List); { ListDir found directory }
                    end;
               end
               else { if not directory }
               begin
                    GetDir(0,s); { Get current dir of default drive }
                    if length(s)<>3 then List.items.add(s+'\'+SearchRec.Name) { Checking if root }
                       else List.items.add(s+SearchRec.Name); { Adding to list }
               end;
               Result:=FindNext(SearchRec);
               Application.ProcessMessages;
         until result<>0; { Found all files, go out }
         GetDir(0,s);
         if length(s)<>3 then ChDir('..'); { if not root then go back one level }
    end;
    Voor elk probleem is een oplossing!

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Je noemt geen Delphi versie. Aangezien dit Vista+ functionaliteit betreft is dat nuttige informatie.

    Dit omdat sinds Vista (dus alweer zo'n 14 jaar) de mijn* directories in de home dir geen echte directories zijn maar een soort links/junction points.

    Hoe het onder Delphi werkt weet ik niet precies maar mogelijk krijgt dat dan fasymlink als attribuut.

    Verder is
    searchrec.attr=fadirectory ook fout, dat moet zijn (fadirectory in searchrec.attr), anders mis je directories met andere attributen (archive, readonly) gezet.

  3. #3
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536
    Dank voor de reactie. Het voorbeeldje komt van het internet.
    Aangezien ik tegenwoordig slechts 'hobby programmeur' ben, ben ik blijven steken bij Delphi 7.
    (Doorgaans heeft dat voor mij voldoende functionaliteit.)
    Voor elk probleem is een oplossing!

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    (eens naar lazarus kijken? Dan maar even wachten, de junction support zit er pas in vanaf 3.2)

    Dat kan, maar dan moet je aan de bak, en zelf met b.v. Jedi headers findfirst nadoen. Er waren ooit wat units met allerlei Vista extensies, maar of dat er nog is?!? Ik zit sinds 2010 al zo'n beetje op D2009 en later.

  5. #5
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536
    Quote Originally Posted by marcov View Post
    Verder is
    searchrec.attr=fadirectory ook fout, dat moet zijn (fadirectory in searchrec.attr), anders mis je directories met andere attributen (archive, readonly) gezet.
    Dat was inderdaad een stap in de goede richting!
    Ondanks dat ging het bij het scannen van de hele partitie toch nog fout, omdat geprobeerd werd hidden directories aan te spreken.
    Dus nu ook gefilterd op faHidden. (Bijvoorbeeld System Volume Information). Daar staan toch geen user files in.
    Voor elk probleem is een oplossing!

  6. #6
    Ik weet niet om wat voor data (en vooral hoeveel data) het gaat, maar ik gebruik DropBox voor het near-realtime backuppen van bepaalde dingen zoals savegames en bepaalde documentjes. DropBox draait op de achtergrond en synchroniseert de inhoud van een specifieke folder met de DropBox servers. Dat synchroniseren gaat volledig automatisch en vrijwel direct.

    In je DropBox map kan je symbolic links maken naar andere bestanden of directories. Zodoende hoef je dus niet expliciet in die map op te slaan.

    Een extra voordeel is dat DropBox gedurende een aantal dagen een aantal versies van het bestand bijhoudt. Als je dus een domme fout maakt en een bestand kapot maakt, dan heb je nog kans om dit te herstellen. Als je maar één kopie hebt, dan zal na het draaien van je backup die kopie ook kapot zijn.

    Overigens hoeft dat natuurlijk geen DropBox te zijn. Er zijn ook andere aanbieders, zoals Microsoft OneDrive en Google Drive die een soortgelijke functionaliteit bieden en waarschijnlijk voordeliger. Als je al een Google account hebt (voor gmail en/of je Android telefoon), dan heb je impliciet al een Google drive storage met 15GB ruimte, dus dan is dat wellicht de beste keuze. Alledrie bewaren ze een aantal dagen oudere versies van je bestanden.

    /salespitch
    1+1=b

  7. #7
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536
    Bedankt voor de suggestie GolezTrol, maar dat gaat niet lukken...
    Om te beginnen gaat het om ruim 100GB data en het betreft voor het grootste deel onderzoeksresultaten en niet gepubliceerde informatie.
    Dat is de reden dat ze die gegevens liever 'binnenshuis' wil houden. Want: "you never know"...

    Maar inmiddels ben ik met mijn eigen backup/synchonisatieprogrammaatje al een aardig eind op streek, dus dat gaat vast wel iets worden denk ik!
    Voor elk probleem is een oplossing!

  8. #8
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Dagelijks 100Gb, voor thuisgebruik? ik hoop dat je dan wel een incremental backup ga maken, anders kost het toch best wel wat tijd
    10.4.2, Delphi2010, of Lazarus 2.2.0

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Syncback free is wat je nodig hebt. Kan zelfs backuppen op bepaalde tijden.

    Ik ben redelijk afgestapt om programma's te maken die al in vele maten beschikbaar zijn op internet.
    Delphi is great. Lazarus is more powerfull

  10. #10
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536
    Uiteraard! Wat er al is en niet gewijzigd is, hoef je natuurlijk niet opnieuw op te slaan!
    Vandaar ook:
    Als een bestand er niet is, dan kopiëren, is het bestand er wel, dan controleren of het huidige bestand nieuwer is dan het bestand op de backup disk en zo ja, opnieuw kopiëren.
    Voor elk probleem is een oplossing!

  11. #11
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Of naar rsync kijken. Ik gebruik cygwin rsync voor eenvoudige incrementele backup scenarios.

  12. #12
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536
    Jaja, ik weet het... Er bestaat heel erg veel op dit gebied.
    Het nadeel van veel programma's is dat ze erg veel instellingen kennen en je vaak goed moet weten wat je doet.
    De gebruikster in nou niet bepaald een 'computer wizard', dus ik wil het liefst een simpel programmaatje met slechts één knop: "maak backup"!
    Daarbij is het maken van zoiets weer eens een leuke vingeroefening om bekend te blijven met Delphi!

    N.B: zojuist mijn creatie getest en het werkt als een trein!
    Voor elk probleem is een oplossing!

  13. #13
    Quote Originally Posted by Ruud123 View Post
    Dit is grofweg de code die ik gebruik om de bestanden op de D partitie te scannen. Dat gaat op zich dus goed, maar niet bij "Mijn documenten".
    Ik stap even laat in... maar wat is eigenlijk de reden waarom je "Mijn documenten" wilt backuppen?
    Inmiddels weet je dat het een juntion/snelkoppeling is. Dat betekent dus dat de "Mijn documenten" een verwijzing is naar een andere directory.
    Normaal is dit C:\Users\Gebruiker\Documents.

    Dan is het dus de vraag... wordt die Documents directory momenteel wel meegenomen in je backupprocedure. Want als dat wel zo is dan kun je "Mijn documenten" dus gewoon negeren.

    (Tenzij die "Mijn documenten" naar een compleet andere directory verwijst op bijvoorbeeld een andere drive. In dat geval zul je hem wel moeten 'volgen')

  14. #14
    Senior Member Ruud123's Avatar
    Join Date
    Sep 2007
    Location
    Leerdam
    Posts
    536
    Normaal is dit C:\Users\Gebruiker\Documents.
    Dat is waar. Maar deze computer is niet 'normaal', want "Mijn documenten" staat op de D partitie.
    Dat is een bewuste keuze om te verhinderen dat bij het terugzetten van een disk image (van de C partitie) alle eigen bestanden op slag verdwenen zouden zijn.
    Na een kleine aanpassing heb ik trouwens totaal geen last van snelkoppelingen of links, want de directory "Mijn documenten" blijkt gewoon benaderbaar te zijn.

    Kortom: het werkt nu als het zou moeten werken. Iedereen bedankt voor de reacties!
    Voor elk probleem is een oplossing!

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
  •