![]() |
Datei löschen - notfalls erzwingen
Hallo,
in meiner Uhr speichere ich Sounds aus einer DLL beim Starten als Einzeldateien ins Verzeichnis des Programms. Während das Programm läuft, kann man eine andere DLL wählen. Jetzt sollten die Sounds durch die aus der anderen DLL ersetzt werden. Hier liegt aber das Problem: Ich erhalte eine Fehlermeldung, dass die zu speichernde Datei nicht erstellt werden konnte. Auch der Aufruf von DeleteFile vorher ist nutzlos, die Dateien werden einfach nicht gelöscht / überschrieben. Im Explorer kann ich sie aber ganz normal löschen, ohne Meldung à la "Die Datei wird gerade verwendet!" zum Speichern verwende ich übrigens beim Start und später auch
Delphi-Quellcode:
Gibt es eine Möglichkeit, die Dateien definitiv zu löschen? Oder irgendwie vom Zugriff durch offensichtlich mein Programm zu trennen?
ResourceStream.SaveToFile(EXEPfad + 'hausl.wav');
|
Re: Datei löschen - notfalls erzwingen
Such mal im Forum unter [dp]Unwiderruflich löschen[/dp] da gabs IMHO schon mal was.
Mfg Tobi [die cl könnte vllt. auch helfen] |
Re: Datei löschen - notfalls erzwingen
Das ist denke ich aber nicht der richtige Code für sowas ... ich würde mal versuchen vor dem Löschen den RessourceStream freizugeben.
Florian |
Re: Datei löschen - notfalls erzwingen
Zitat:
Zitat:
|
Re: Datei löschen - notfalls erzwingen
*push*
Ich habe mal gesucht (ich meine, schon mal was in der Art "Datei freigeben" hier gelsesen zu haben), aber nichts gefunden. |
Re: Datei löschen - notfalls erzwingen
ich hatte auch öfters das problem, dass ein TStream-Nachkomme seine Dateihandles nicht freigibt... mehr kann ich dir nicht sagen dazu...
Und ja, man kann die handles, die auf einer datei liegen, ermitteln und manipulieren. der Processexplorer von sysinternals kann das. wie du das in delphi machst, weiß ich nicht. |
Re: Datei löschen - notfalls erzwingen
ini file nehmen und damit löschen..... die dateiendung muss ja nicht immer ini sein
|
Re: Datei löschen - notfalls erzwingen
Zitat:
Zitat:
|
Re: Datei löschen - notfalls erzwingen
Ähm, was? Das Ding mit TIniFile öffnen und löschen? Soll ich das ernstnehmen?
|
Re: Datei löschen - notfalls erzwingen
Du brauchst ja nur mal rausfinden, wie solche Programme wie der ProzessExplorer an die (File)Handles rankommen und dann nur das Entsprechende zu schließen ._.
[add] Da kann man gleich Format im DOS-Modus nehmen, das schließt auch alle offenen Handles :angel: |
Re: Datei löschen - notfalls erzwingen
das meinte ich, himitsu ^^
Du kannst auch das programm bzw. alle teile, die mit dateien zu tun haben, durchsteppen, und im processexplorer dann immer nachschauen, welche dateihandles geöffnet bzw. geschlossen werden. dann solltest du drauf kommen, wo eine datei nicht fregegeben wird, und da mal intensiver buddeln ;) Obwohl "SaveToFile" eigentlich ja doch die Datei öffnen, schreiben und dann wieder schließen sollte :gruebel: |
Re: Datei löschen - notfalls erzwingen
Das öffnen zum Schreiben geht aber nur, wenn die Datei entweder nicht schon irgendwo geöffnet ist, oder da zum Zindestens SHARED_READ/SHARED_WRITE freigegeben wurde :zwinker:
Und durchsteppen ... mal lasse die Datei suchen, da zeigt der PE einem schon wo sie noch offen ist ^^ |
Re: Datei löschen - notfalls erzwingen
Es hat sich jetzt anders gelöst: Ich habe per MCISendString die ausgelagerten Sounds abgespielt (open, set, play). Das, was in der Prozedur, die ich irgendwo hier mal aus dem Forum hatte, fehlt, ist der Command close - des Rätsels Lösung.
Ich habe jetzt beim Aufruf von Play den Command notify angehängt. Bei der Message MM_MCINotify gebe ich die Datei wieder frei. (Das jetzt nur, falls jemand ein ähnliches Problem hat). Trotzdem Danke für alle Vorschläge. :-D Gruß, ManuMF |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz