AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Festplattenzugriffe

Ein Thema von Slavik · begonnen am 20. Nov 2004 · letzter Beitrag vom 24. Nov 2006
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#31

Re: Festplattenzugriffe

  Alt 16. Mär 2006, 13:40
Das wäre eine Idee. Den Dialog kann man ja auch unsichtbar machen oder?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#32

Re: Festplattenzugriffe

  Alt 16. Mär 2006, 14:37
Ich habe es jetzt auch mal mit dieser Unit probiert: http://www.delphipraxis.net/internal...=342496#342496 aber das hat leider auch nicht geholfen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#33

Re: Festplattenzugriffe

  Alt 5. Mai 2006, 06:36
Hallo,

das geht doch ganz einfach. Windoof setzt bei jeder Änderung einer Datei das Archivierungsbit.
Du erstellst eine Batchdatei mit folgendem Inhalt:

xcopy quelle ziel /S /m

hier wird alles kopiert was unter quelle liegt und dessen Archivierungsbit gesetzt ist.
Du kannst das von Windoof automatisch durchführen lassen oder von Hand.
Mag zwar primitiv aussehen ist aber enorm wirkunsvoll.
/s alle subdirectories
/m nur Dateien mit gesetztem Archivierungsbit
/y keine Nachfrage beim Überschreiben.

Beispiel
Delphi-Quellcode:
@echo off
xcopy e:\rcrset\*.* L:\rcrset\*.* /S /y /m
Das Ganze lässt sich auch von Delphi starten.

Rainer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#34

Re: Festplattenzugriffe

  Alt 5. Mai 2006, 10:05
Zitat von runger:
das geht doch ganz einfach. Windoof setzt bei jeder Änderung einer Datei das Archivierungsbit.
was die von M$ machen is mir eigentlich vollkommen schnuppe ... in meinen Programmen behandle ich diese Attribut selber und bei bestimmten "Änderungen" wird es eben mal nicht gesetzt, also ist diese Methode da nicht immer anwendbar
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#35

Re: Festplattenzugriffe

  Alt 5. Mai 2006, 11:25
Hallo Luckie,

ich gebe mal auch meinen Senf dazu.
Ich habe mal etwas ähnliches realisiert und mit dem Löschen/öffnen ebenfalls Probleme gehabt. Ich habe es lösen können, indem ich es mehrmals versuche in einem gewissen Zeitraum. Sprich while fileExists do deleteFile + sleep.
Und noch etwas, ich weiss zwar nicht welche Sambar-Version auf diesem einen Server läuft, jedoch bekomme ich keine CHange-Notification, wenn jemand anderes eine Datei dort ändert. Sprich ich musste leider auf Polling zurückgreifen. Auf einem Windows-Rechner lief es hingegen. Nur dass du diesen evtl. Fall mitbedenkst.

@runger: Und danach attrib * -a? Funktioniert dann nur in Fällen, in denen selten Änderungen erfolgen. Bei ständigen Schreibzugriffen wird dir sonst der Zeitabstand xcopy -> attrib zum Verhängnis.

MfG
V.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#36

Re: Festplattenzugriffe

  Alt 5. Mai 2006, 11:28
Es hat sich Gott sei dank erledigt. das Programm wird jetzt über den Taskplaner nachts gestartet oder eben manuell.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
runger
(Gast)

n/a Beiträge
 
#37

Re: Festplattenzugriffe

  Alt 5. Mai 2006, 11:49
Hallo,

Zitat:
was die von M$ machen is mir eigentlich vollkommen schnuppe ... in meinen Programmen behandle ich diese Attribut selber und bei bestimmten "Änderungen" wird es eben mal nicht gesetzt, also ist diese Methode da nicht immer anwendbar
Wer ist dir denn auf den Schlips getreten.
Das Archivierungsbit zu manipulieren ist absolut schlechter Stil. Fast alles was es an Backup-Software gibt benutzt dieses flag.
Bei uns wird soetwas nicht akzeptiert.

Rainer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#38

Re: Festplattenzugriffe

  Alt 5. Mai 2006, 12:11
Ich hab z.B. ein winziges Progie, welches in Dateien den Zeilenumbruch an das im Windows übliche #13#10 anpaßt, dabei werden ja das Archivattribut, sowie das Anderungsdatum der Datei geändert, allerdings ändert sich ja nicht "wirklich" was am Dateiinhalt, daher setze ich z.B. in diesem Fall diese Werte wieder zurück, damit ich den tatsächlichen, "inhaltlichen" Zustand der Datei noch an diesen Werten erkennen kann
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#39

Re: Festplattenzugriffe

  Alt 1. Sep 2006, 12:15
So, dann mach ich auch mal mit ... irgendwas stimmt wohl wirklich mit den Befehlen nicht.

In diesem Code (ist im Grunde vom Aufbau her wie der Erste hier im Thread) reagiert Find*ChangeNotification/WaitForSingleObject sehr oft auf Änderungen (aber auch nicht immer), wobei ReadDirectoryChangesW entweger garnichts zurückgibt und die Ausführung dort zum Stehen kommt, oder ebenfalls nur die letzte Änderung ankommt.
Delphi-Quellcode:
Function DCSourceChangesThread(DC: TDirectoryCompare): LongWord; StdCall;
  Const BufferSize = 4096{65536};

  Var DH, NH: THandle;
    Buffer, P: PWideChar;
    Name: Widestring;
    Status: TDCObjStatus;
    i: Integer;
    W: LongWord;

  Label LExit;

  Begin
    Result := 0;
    DH := CreateFileW(PWideChar(Copy(DC._SourceRoot, 1, Length(DC._SourceRoot) - 1)), GENERIC_READ or FILE_LIST_DIRECTORY,
      FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
    NH := FindFirstChangeNotificationW(PWideChar(Copy(DC._SourceRoot, 1, Length(DC._SourceRoot) - 1)),
      True, FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME or FILE_NOTIFY_CHANGE_ATTRIBUTES or
      FILE_NOTIFY_CHANGE_SIZE or FILE_NOTIFY_CHANGE_LAST_WRITE or FILE_NOTIFY_CHANGE_CREATION);
    Buffer := GetMemory(BufferSize);
    If (DH <> INVALID_HANDLE_VALUE) and (NH <> INVALID_HANDLE_VALUE) and (Buffer <> nil) Then
      Repeat
        If (DC._DestChangesThread = INVALID_HANDLE_VALUE) or (DC._Pause = 2) Then GoTo LExit;
        Case WaitForSingleObject(NH, 1000) of
          WAIT_FAILED: Break;
          WAIT_OBJECT_0:
            If ReadDirectoryChangesW(DH, Buffer, BufferSize, True, FILE_NOTIFY_CHANGE_FILE_NAME
              or FILE_NOTIFY_CHANGE_DIR_NAME or FILE_NOTIFY_CHANGE_ATTRIBUTES or FILE_NOTIFY_CHANGE_SIZE
              or FILE_NOTIFY_CHANGE_LAST_WRITE or FILE_NOTIFY_CHANGE_CREATION, @W, nil, nil) Then Begin
              P := Buffer;
              Repeat
                SetLength(Name, PFileNotifiInformation(P)^.FileNameLength div 2);
                Move(PFileNotifiInformation(P)^.FileName, Name[1], PFileNotifiInformation(P)^.FileNameLength + 1);
                Case PFileNotifiInformation(P)^.Action of
                  FILE_ACTION_ADDED: Status := [dcsDeleted];
                  FILE_ACTION_REMOVED: Status := [dcsCreated];
                  FILE_ACTION_MODIFIED: Status := [dcsSize..dcsLastWriteTime, dcsContent..dcsAttrEncrypted];
                  FILE_ACTION_RENAMED_OLD_NAME: Status := [dcsName];
                  FILE_ACTION_RENAMED_NEW_NAME: Status := [dcsName];
                  Else Status := [dcsSize..dcsAttrEncrypted];
                End;
                Lock(DC._Lock);
                i := High(DC._SourceChangesList);
                While i >= 0 do
                  If WideSameText(DC._SourceChangesList[i].Name, Name) Then Break
                  Else Dec(i);
                If i < 0 Then Begin
                  i := Length(DC._SourceChangesList);
                  SetLength(DC._SourceChangesList, i + 1);
                  DC._SourceChangesList[i].Name := Name;
                  //UniqueString(DC._SourceChangesList[i].Name); // WideString/OLE-String is always an UniqueString.
                  DC._SourceChangesList[i].Changes := [];
                End;
                DC._SourceChangesList[i].Changes := DC._SourceChangesList[i].Changes + Status;
                DC._SourceChangesList[i].Time := GetTickCount;
                Unlock(DC._Lock);
                P := Buffer + PFileNotifiInformation(P)^.NextEntryOffset;
              Until PFileNotifiInformation(P)^.NextEntryOffset = 0;
            End Else Break;
        End;
      Until not FindNextChangeNotification(NH);
    DC._CallStatusProc(dcsErrorSourceDirChangesThread, '', Integer(DC));

    LExit:
    FreeMemory(Buffer);
    FindCloseChangeNotification(NH);
    CloseHandle(DH);
    LockedSet(DC._SourceChangesThread, INVALID_HANDLE_VALUE);
  End;
Probleme mit dem Dateizugriff sollte es nicht geben, da hier nicht auf die Dateien zugegriffen wird, dieses würde erst Zeitversetzt ein einem anderem Thread geschehen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#40

Re: Festplattenzugriffe

  Alt 3. Sep 2006, 20:06
Hi,

da ich grade auch an so einem Problem stehe und ich mir den Code von Christian mal ansah... Es ist ja schon interessant was so alles geschieht selbst wenn man glaubt der Rechner ist in Idle-Mode!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz