AGB  ·  Datenschutz  ·  Impressum  







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

Noch ein zugriff auf Datei ?

Ein Thema von EWeiss · begonnen am 2. Apr 2008 · letzter Beitrag vom 2. Apr 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 06:18
Bin der Meinnug das alle Handles und threads der verwendeten Daten geschlossen sind
Trotzdem bekomme ich in "finalization" beim löschen einer Datei zugriff verweigert.

Wie kann ich vorher testen ob diese auch wirklich geschlossen ist damit
sie gelöscht werden kann?

Edit:

Prüfe mit einer Function hier aus dem Forum vorher ob es möglich ist die Datei zu löschen
es wird ein true zurückgegeben .. diese scheint nur zu prüfen ab ein generelles löschen möglich ist
aber nicht zum jetzigen zeitpunkt

Delphi-Quellcode:
    if CheckAccessToFile(FILE_DELETE, // check for generic write access
      thePath + '~tmp4358.dat')=true then;
    if DeleteFile(thePath + '~tmp4358.dat') = false then
         MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION);
gruss Emil
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 07:14
Moin Emil,

in Delphi solltest du einen booleschen Ausdruck nicht redundant erweitern:

Delphi-Quellcode:
begin
  // ...
  if DeleteFile(thePath + '~tmp4358.dat') {= False} then
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION);
  // ...
end;
Boolsche Werte werden auf Integer-Werte abgebildet und umgekehrt. Für Delphi gibt es eine Abbildungsregel, API-Funktionen verwenden mitunter eine abweichende. Dies nur am Rande.

Zu deinem eigentlichen Problem: Wenn du eine Datei im Abschnitt finalization löschen willst, dann solltest du sie im Abschnitt initialization bereitgestellt haben. Arbeitest du dabei mit API-Funktionen wie CreateFile() oder mit Delphi Streams oder mit den alten Prozeduren AssignFile() etc.? Zu welchem Zeitpunkt besorgst du dir den Zugriff auf die temporäre Datei? Wann und wo schließt du sie?

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 08:23
Mich irritiert außerdem das Semikolon hinter der 2. Codezeile.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 09:22
Zitat von marabu:
Moin Emil,

in Delphi solltest du einen booleschen Ausdruck nicht redundant erweitern:

Delphi-Quellcode:
begin
  // ...
  if DeleteFile(thePath + '~tmp4358.dat') {= False} then
    MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Confirm', MB_OK or MB_ICONINFORMATION);
  // ...
end;
Boolsche Werte werden auf Integer-Werte abgebildet und umgekehrt. Für Delphi gibt es eine Abbildungsregel, API-Funktionen verwenden mitunter eine abweichende. Dies nur am Rande.

Zu deinem eigentlichen Problem: Wenn du eine Datei im Abschnitt finalization löschen willst, dann solltest du sie im Abschnitt initialization bereitgestellt haben. Arbeitest du dabei mit API-Funktionen wie CreateFile() oder mit Delphi Streams oder mit den alten Prozeduren AssignFile() etc.? Zu welchem Zeitpunkt besorgst du dir den Zugriff auf die temporäre Datei? Wann und wo schließt du sie?

Freundliche Grüße

ich initialisiere (loadlibrary) in meiner INIT Routine
könnte ich in die initializations routine verschieben wäre kein problem.
Mit Delphi Stream wird aus der resource eingeladen in dieser besagten INIT Routine

Angesprochen wird sie sobald ein zugriff auf ein plugin stattfindet
sie bleibt im speicher und wird nicht immer wieder gelöscht(freigegeben) denke ist nicht nötig da nur 4K groß
ich schließe sie in finilization bevor ich sie lösche... was nicht geht.

Uwe meint es hätte mit dem DllCache zu tun (Ich schätze mal, das das daran liegt, das DLL's gecached werden.)

Edit:
habs nochmal versucht!
So siehts aus .. gleiche problem mit dem löschen..
Delphi-Quellcode:
initialization
  begin
    getVisHeader := nil;

     //Wasabi initialisieren
     SetLength(thePath, MAX_PATH) ;
     lng := GetTempPath(MAX_PATH, PChar(thePath)) ;
     SetLength(thePath, lng) ;

     ResStream := TResourceStream.Create(HInstance, 'DLL', 'DATA');
     ResStream.SaveToFile(thePath + '~tmp4358.dat');
     SetFileAttributes(PChar(thePath + '~tmp4358.dat'), FILE_ATTRIBUTE_HIDDEN);

     ResStream.free;

     WAServiceHandle := Loadlibrary(PChar(thePath + '~tmp4358.dat'));
     if (WAServiceHandle = 0) then
       begin
       MessageBox(0, 'Error loading GetAPIService',
                              'initialization', MB_OK or MB_ICONERROR);
       halt;
     end;
  end


finalization
  begin

  CloseVisDLL;
  
  if (WAServiceHandle <> 0) then
  begin
    FreeLibrary(WAServiceHandle);
    WAServiceHandle := 0;
  end;

  if (DeleteFile(thePath + '~tmp4358.dat') = false) then
    MessageBox(0, PChar(SysErrorMessage(GetLastError)),
      'Confirm', MB_OK or MB_ICONINFORMATION);

  end
gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 09:24
Zitat von DeddyH:
Mich irritiert außerdem das Semikolon hinter der 2. Codezeile.
Ja kann man machen muss man aber nicht ..
Hat aber keinen einfluss auf meine frage das die Datei nicht gelöscht wird

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 09:30
Zitat von EWeiss:
Prüfe mit einer Function hier aus dem Forum vorher ob es möglich ist die Datei zu löschen
es wird ein true zurückgegeben .. diese scheint nur zu prüfen ab ein generelles löschen möglich ist
aber nicht zum jetzigen zeitpunkt
Doch. Es wird aber nur geprüft, ob du die nötigen Rechte hast sie zu löschen, was aber nicht bedeutet, dass du sie auch wirklich löschen kannst, weil eventuell noch ein anderer Prozess auf die Datei zugreift.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Noch ein zugriff auf Datei ?

  Alt 2. Apr 2008, 09:34
Zitat von Luckie:
Zitat von EWeiss:
Prüfe mit einer Function hier aus dem Forum vorher ob es möglich ist die Datei zu löschen
es wird ein true zurückgegeben .. diese scheint nur zu prüfen ab ein generelles löschen möglich ist
aber nicht zum jetzigen zeitpunkt
Doch. Es wird aber nur geprüft, ob du die nötigen Rechte hast sie zu löschen, was aber nicht bedeutet, dass du sie auch wirklich löschen kannst, weil eventuell noch ein anderer Prozess auf die Datei zugreift.
Dann steht die Frage im Raum ob es sinn macht die Funktion integriert zu lassen.
Denn im temp Order wird jeder zugriff auf die dateien zum löschen haben.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:30 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