Kopírování adresáře s vybranými soubory - Delphi
Zdravím Vás při zamračeném státním svátku
Zase se trochu snažím programovat, akorát mi nejde zprovoznit jedna myšlenka. Chci mít funkci na kopírování adresáře s tím, že pokud bude hodnota "posledniverze" nastavena na true, tak to bude z adresáře kopírovat jen soubory s nejvyšší příponou. Abych to vysvětlil, jeden program mi při uložení nepřepíše původní soubory, ale vytvoří nové. Celkem dobrá vlastnost když se člověk splete a uloží :) . Takže adresář pak vypadá třeba takto:
souborA.1
souborA.2
souborA.3
souborA.4
souborA.5
souborB.1
souborB.2
souborB.3
souborC.125
souborC.126
No a jelikož při spoustě situací není potřeba staré soubory kopírovat, tak bych potřeboval nějak udělat, aby se zkopírovala od každého souboru jen verze s nejvyšším číslem, takže
souborA.5
souborB.3
souborC.126
V současné době používám toto na kopírování celých adresářů
function CopyDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
begin
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY;
pFrom := PChar(fromDir + #0);
pTo := PChar(toDir)
end;
Result := (0 = ShFileOperation(fos));
end;
jenže na to moje kopírování bych to viděl tak, že se načtou všechny soubory z adresáře, nějak se setříděj do seznamu, ze seznamu se vyhoděj staré verze a pak se ten seznam pošle do kopírovací funkce jednotlivých souborů. A teď jak na to. Potřebuji nakopnout kde začít, už to na mě začíná být vyšší dívčí.
Neviem poradiť najefektívnejší postup, ale nejak tak, ako píšeš...
Ak som pochopil správne - meniť sa bude iba prípona...
Zrejme to nebude "najlepší" spôsob, ale napadá ma narýchlo len toto:
0. Vytvoriť možno TStringList - kvôli triedeniu
1. Načítavať postupne všetky súbory z adresára FindFirst..., FindNext a testovať či sa názov súboru už v zozname nachádza a akú má príponu
2. Ak sa nenachádza - pridáš novú položku (názov súboru), ak áno - porovnáš príponu a potom buď nahradíš položku v zozname novším názvom, alebo ideš ďalej.
3. Následne vytvorený zoznam prechádzaš od začiatku do konca a kopíruješ...
Kód Ti sem písať nejdem, (nemám teraz čas), ak niečo nebudeš vedieť ozvi sa, večer sa na to môžem pozrieť - pomôcť...
Netuším akú verziu Delphi máš..., ale od DELPHI XE2 pribudla trieda TDictionary...
príklad: