Autor Beitrag
megaperlz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

Win95 Win98 Win2000 WinXP
D5
BeitragVerfasst: Di 21.06.05 12:03 
das Topic sagt eigentlich schon alles aus...

ich hab ein verzeichnis mit ca 100 unterverzeichnissen und jeder menge dateien die ich von einer cd runterkopiere...

diese sind natürlich alle schreibgeschützt :-(

gibts ne möglichkeit direkt bei allen dateien den schreibschutz aufzuheben oder muss ich da ne schleife bauen die jede datei einzelnt abklappert? (und falls doch wie könnte ich dies realisieren?)

mfg

_________________
Nichts ist gelber als Geld selber.
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Di 21.06.05 12:56 
Hallo,

ausblenden Delphi-Quelltext
1:
SetFileAttributes (PChar ('C:\DeinOrdner'),FILE_ATTRIBUTE_NORMAL);					


setzt bei C:\DeinOrdner alle Attribute auf nicht aktiviert (keine Attribute)
Damit wird auch der Schreibschutz entfernt. :)

Das gilt aber wahrscheinlich nicht für die Unterordner :(

Dazu musst du in einer Schleife alle Unterordner und Dateien scannen (Rekursion) :lol: :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure GetFilesInDirectory(ADirectory: string; AMask: String; ARekursiv: Boolean);
var
  SR: TSearchRec;
begin
  if (ADirectory<>''and (ADirectory[length(ADirectory)]<>'\'then
    ADirectory:=ADirectory+'\';

  if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0then begin
    repeat
      if (SR.Name<>'.'and (SR.Name<>'..'and (SR.Attr<>faDirectory) then
          SetFileAttributes (PChar (ADirectory+SR.Name),FILE_ATTRIBUTE_NORMAL)
    until FindNext(SR)<>0;
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0then
    begin
      repeat
        if (SR.Name<>'.'and (SR.Name<>'..'then
          GetFilesInDirectory(ADirectory+SR.Name,AMask,True);
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;


Beispielaufruf :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetFilesInDirectory('C:\DeinOrdner','*.*',true);
end;


(frei nach www.delphi-forum.de/...erzeichnissen+suchen)

Der erste Parameter erwartet den Ordner, den du scannen willst.
Der zweite Parameter erwartet eine Dateimaske.
Der dritte Parameter erwartet, ob in Unterverzeichnissen (=true) gesucht werden soll oder nicht (=false).

Die procedure wird allerdings nur die Dateien und nicht die Ordner berücksichtigen aber das schaffst du mit ein paar Veränderungen bestimmt selber...

Viel Spass
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 21.06.05 13:00 
Klarer Fall für mein FileCopy ;-) Siehe Anhang ...

Günstige Blockgrößen liegen bei 128 und 256 für CDs, 64 für Disketten. Schnelle Netzwerke (100MBit++) sollten mit 512 gut laufen. Bei Festplatten solltest Du auch mit 1024 KB Puffer recht gute Ergebnisse bekommen. Entscheidend ist immer das langsamste Medium.

Eine neue Version wird irgendwann mal folgen, aber ATM hab ich keine Zeit an dem Programm weiterzuarbeiten (außer kleinere Bugfixes, falls nötig).

Known: Bei großen Datenmengen kann es zu GDI-Fehlern kommen, die ich jedoch nicht eingrenzen konnte (Leinwand erlaubt kein Zeichnen).
Warn: Die Move-Funktion nicht für sensible Daten nutzen! Ist nicht bis ins letzte getestet. Ich übernehm keine Garantie, dass sie immer 100%ig funktioniert!
Einloggen, um Attachments anzusehen!
_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Di 21.06.05 13:10 
Titel: Re: Verzeichnis ink Unterverzeichnisse Schreibschutz entfern
user profile iconmegaperlz hat folgendes geschrieben:
gibts ne möglichkeit direkt bei allen dateien den schreibschutz aufzuheben oder muss ich da ne schleife bauen die jede datei einzelnt abklappert? (und falls doch wie könnte ich dies realisieren?)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure RemoveReadOnlyAttr(const Path: String);

  procedure SearchFiles(const Path: String; Files: TStringList);
  var
    SR: TSearchRec;
  begin
    if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        if (SR.Name <> '.'and (SR.Name <> '..'then
          if (SR.Attr and faDirectory) = faDirectory then
          begin
            SearchFiles(IncludeTrailingBackslash(Path + SR.Name), Files);
          end else
            Files.Add(Path + SR.Name);
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
  end;

var
  Files: TStringList;
  I: Integer;
  Attr: DWORD;
begin

  if DirectoryExists(Path) then
  begin
    Files := TStringList.Create;
    try
      SearchFiles(IncludeTrailingBackslash(Path), Files);
      for I := Files.Count - 1 downto 0 do
      begin
        Attr := GetFileAttributes(PChar(Files[I]));
        Attr := Attr and not FILE_ATTRIBUTE_READONLY;
        SetFileAttributes(PChar(Files[I]), Attr);
      end;
    finally
      Files.Free;
    end;
  end;

end;

_________________
Ciao, Sprint.
megaperlz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 53

Win95 Win98 Win2000 WinXP
D5
BeitragVerfasst: Di 21.06.05 13:21 
danke danke hat hervorragen funktioniert :-)

mfg mega

_________________
Nichts ist gelber als Geld selber.