Zmiana atrybutów katalogu

2011-07-26 13:47
delphi_maker
0

Słuchajcie, jak zmienić atrybuty folderu z tylko do odczytu na normalne i odwrotnie, jakby się dało to razem ze wszystkimi podfolderami?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-07-26 15:13
Opi
0

Zmiana atrybutów folderu jest taka sama jak plików. A co za tym idzie, wystarczy warunkowo sprawdzać, czy obiekt jest folderem i zmieniać mu atrybut.

Pozostało 580 znaków

2011-07-26 17:08
delphi_maker
0

A jak sprawdzić? Po prostu:

if DirectoryExists(sciezka_do_folderu) then
...

Pozostało 580 znaków

2011-07-26 20:21
Opi
0

Tym poleceniem nie sprawdzasz czy to jest folder...
Do tego celu używasz klasy TSearchRec.

Pozostało 580 znaków

2011-07-26 20:57
delphi_maker
0

A mógłbyś jakoś podpowiedzieć jak tego użyć?

Rozumiem, że później mam zrobić coś takiego:

SetFileAttributes('C;\katalog\, FILE_ATTRIBUTE_NORMAL);

Pozostało 580 znaków

2011-07-26 21:49
0

Pogoogluj za przykładami, pierwszy lepszy link: http://www.delphibasics.co.uk/RTL.asp?Name=FileSetAttr


edytowany 2x, ostatnio: olesio, 2011-07-26 21:57

Pozostało 580 znaków

2011-07-26 22:04
delphi_maker
0

No niestety dużo googlowałem, ale niestety nie działa. Na ten przykład, miało wyłączać tryb tylko do odczytu, ale nie działa:

procedure jakas_tam;
var
 searchResult : TSearchRec;
 folderpath: string;
 attrs : integer;

begin
 folderpath := 'C:\Folder';
 setcurrentdir(folderpath);
 if FindFirst('*', faDirectory, searchResult) = 0 then
 begin
  repeat
  if (searchResult.attr and faDirectory) = faDirectory then
   begin
    attrs := FileGetAttr(folderpath + '\' + searchresult.name);
    if attrs and faReadOnly > 0 then
     begin
      if (Searchresult.Name[1] <> '.') then 
       FileSetAttr(folderpath + '\' + searchresult.Name, 0);
     end;
   end;
  until FindNext(searchResult) <> 0;
  FindClose(searchResult);
 end;
 FileSetAttr(folderpath, 0);
end;

Pozostało 580 znaków

2011-07-26 22:07
0

Przyznam się, że z korzystaniem z wyszukiwania plików miałem zawsze problemy by to napisać samodzielnie, a jedyny użyty przeze mnie dynamicznie moduł, jaki działa jak należy pobrałem stąd: http://www.torry.net/vcl/filedrv/search/wdfindf.zip polecam nim wyszukać podkatalogi (można ustawić aby tylko je wyszukiwał w danej ścieżce). Następnie dla zwróconej listy ścieżek do katalogów, wykonać sprawdzanie i w zależności od posiadanych już atrybutów ustawić nowe atrybuty, bo tak chyba - o ile dobrze zrozumiałem - ma działać kod wedlug Ciebie.


edytowany 1x, ostatnio: olesio, 2011-07-27 01:48

Pozostało 580 znaków

2011-07-26 22:20
delphi_maker
0

No tak właśnie chciałem. Spróbuję.

Niestety mam problem z zainstalowaniem tego komponentu dla Delphi 2009. Zainstalowałem dla Delphi 7, ale niestety nie działa mi wywołanie funkcji:

var
  strDirs: TStringList;
begin
  FindFile1.FindSubDirectory(strDirs, Edit1.Text);
...

Niestety wyrzuca mi w tej funkcji "Undeclared identifier", konkretnie w "FindSubDirectory".

Coś Ci wyrzuca? Ojejku mam nadzieje że uda Ci się doprowadzić do tego żeby przestało to COŚ wyrzucać. >.> - payl 2011-07-29 00:15

Pozostało 580 znaków

2011-07-29 11:30
delphi_maker
0

@payl - jak nie masz nic do powiedzenia, to nie mów nic.

@olesio - Nie mogłem zainstalować tego komponentu, ale przełożyłem tamte funkcje do programu. Niestety nie wyłączają atrybutu tylko do odczytu...

Pozostało 580 znaków

2011-07-29 22:07
0

Nie wiem z czym masz problem. Jak masz undeclared indefider to za pewne używasz metody, której kompilator nie zna. Ja użyłem tego modułu findfile.pas do tej pory tylko w jednym programie i zrobiłem to dynamicznie. Czyli wrzuciłem moduł do kataloigu projektu i dodałem go do sekcji uses, a wyszukiwanie robiłem w wątku (FRecurse to zmienna ustawiana przez konstruktor wątku 0 jest ona typu boolean oczywiście) tak jak poniżej:

var
  FF : TFindFile;
begin
  with MainForm do
  begin
    try
      FindedSL := TStringList.Create;
      FF := TFindFile.Create(MainForm);
      FF.Recurse := FRecurse;
      FF.Directory := DirLabel.Caption;
      FF.Filter := '*.ico';
      FF.Execute;
    finally
      FindedSL.Assign(FF.Files);
      FF.Free;
    end;
//...

Poza tym przecież w źródle komponentu widać wyraźnie, że można własnością ustawić jakiego typu pliki czy katalogi ma wyszukiwać:

type
  TAttrOption = (ffReadOnly, ffHidden, ffSystem, ffVolumeID, ffDirectory, ffArchive);
  TAttrOptions = set of TAttrOption;
//...
    property Attributes: TAttrOptions read FAttribs write FAttribs
//...

Komponent był - jak wcześniej wspomniałem - testowany przeze mnie i się jak dla mnie sprawdził dobrze. A Ty chyba masz problem z jakimiś elementarnymi podstawami jak używanie komponentów dynamicznie, a żeby to ogarnąć powinieneś najpierw chyba poznać podstawy języka Delphi, a dopiero później brać się za bardziej zaawansowane programy, które coś wyszukują ;/


edytowany 1x, ostatnio: olesio, 2011-07-29 22:08

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0