vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Tipp 1975: Datei sicher löschen 
Autor: AlexWirt
Datum: 10.06.12 12:26

http://www.vbarchiv.net/forum/read.php?f=31&i=465&t=465
Stimmt das?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: ModeratorFZelle (Moderator)
Datum: 10.06.12 13:47

jain.

Auf einer Platte mit wearleaving ( also ssd ) wäre das so.
Bei normalen hdd's ist das nicht richtig was Superpeppi sagt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: AlexWirt
Datum: 10.06.12 14:14

Danke.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: JangoF
Datum: 10.06.12 19:06

Was genau soll daran nicht stimmen?

Sobald eine Datei im Schreibmodus geöffnet wird, wird eine vorhandene mit dem gleichen Namen gelöscht.
Die neuen Daten müssen aber nicht an die selbe Stelle geschrieben werden an der vorher die alten Daten standen.
Es wird eine komplett neue Datei geschrieben deren Datenblöcke an eine zu diesem Zeitpunkt günstige Stelle geschrieben werden.
Was nicht unbedingt die selbe Stelle sein muß wie die alte Datei vorher.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: ModeratorFZelle (Moderator)
Datum: 10.06.12 21:32

Wer hat dir denn sowas erzählt?
Wenn eine vorhandene Datei im Schreibmödus geöffnet wird, wird sie ( außer bei Datenträgern mit wearleaving ) eben sehr wohl überschrieben.
Nur wenn sie nicht bis zum clusterende geschrieben wird, können Daten vorhanden bleiben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: JangoF
Datum: 10.06.12 22:51

Beim öffnen einer neuen Datei wird eine mit gleichem Namen gelöscht.
War schon so vor über 30 Jahren als ich mich in die Tiefen des Dateisystems gegraben habe und hat sich bis heute nicht geändert.
Es gibt für das Betriebssystem keinen Grund sich die alten Datenblöcke hierbei zu merken und dann auch noch darauf zu achten ist die Neue länger oder kürzer.
Viel zu aufwendig und umständlich.
Es ist viel einfacher für das System die Neue an einen für das Betriebssystem günstigen Punkt auf die Platte neu zu schreiben.
Natürlich ist die wahrscheinlichkeit gegeben das die Neue auf den Platz der Alten geschrieben wird.
Sicher ist das aber nicht.
Nur bei Dateien die Clusterweise geschrieben werden wie z.B. Datenbanken, wird der selbe Sektor wieder mit den neuen Daten überschrieben.

Dazu kommt das Windows mit Schattenkopien arbeitet wo die alte Datei noch als mehrfache Kopie vorhanden sein kann und selbst die Blöcke einer Datenbank nicht jedesmal überschrieben werden.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: ModeratorFZelle (Moderator)
Datum: 11.06.12 10:03

Das war schon vor 30 Jahren nicht so.
Im Gegenteil.
Wenn du eine vorhandene Datei zum schreiben öffnest und kürzt, bleiben Fragmente des alten Inhalts in den restlichen Sektoren der Verwaltungseinheiten vorhanden.
Das war und ist so bei allen FAT und auch bei NTFS Systemen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: JangoF
Datum: 11.06.12 13:34

Wenn man eine Datei zum Schreiben öffnet wird die Alte auf jedenfall vorher gelöscht.
Kann man schön selbst mal sich ansehen in dem man ein kleines VB oder VBA Programm schreibt.

Dort öffnet man eine Datei zum schreiben die es bereits gibt.
Am besten eine größere damit man den Speicherverbrauch besser erkennen kann.
Vor dem Start des Programms schaut man sich die Eigenschaften des Laufwerks an und merkt sich den belegten und freien Speicherplatz.
Dann startet man das Programm und führt nur die Zeile zum öffnen der Datei aus und hält das Programm dort an.
Der Zugriff auf die Datei bleibt bestehen, die Datei bleibt geöffnet.
Dann sieht man das die neue Datei eine größe von 0 hat und in den Eigenschaften des Laufwerks ist der komplette Speicherplatz der alten Datei wieder freigegeben worden.

Theoretisch könnte jetzt ein anderer Prozess diesen Platz teilweise oder ganz in Beschlag nehmen.
Welchen Sinn sollte es jetzt für den Schreibzugriff unseres Programms machen die alten freigewordenen Sectoren wieder ausfindig zumachen und dabei auch noch darauf zu achten ob nicht eine andere Datei diese bereits in Beschlag genommen hat.
Warum sollte man so eine Routine ins System einbauen die keinem sinnvollem Zweck dienen würde.
Nur damit die Neue an den Platz der Alten wandert? Wofür?
Es ist für das System viel einfacher und sicherer die Alte einfach zu löschen und die Neue wie eine Neue zu behandeln.

Mit Defragler kann man sich z.B. die Verteilung einer Datei über die Platte ansehen (Muss schon eine größere sein).
Dort kann man schön sehen das eine Datei die Vorher ein bestimmtes Muster in der Fragmentation aufwies beim überschreiben sich dieses jedesmal ändert.

Das Dateien troztdem oft an dem alten Platz stehen ist reiner Zufall.

Und hat mit "Sicherem Löschen" nichts zu tun.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: Manfred X
Datum: 11.06.12 13:49

Hallo!

Das hängt davon ab, wie eine Datei geöffnet wird.
Falls z.B. ein Filestream zum Schreiben geöffnet wird,
bleibt der Inhalt der Datei erhalten und Bereiche können
gezielt überschrieben werden.

Open -> Write != Delete -> Create -> Write

MfG
Manfred

Beitrag wurde zuletzt am 11.06.12 um 14:06:10 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: Preisser
Datum: 11.06.12 14:16

Hallo,

ich weiß nicht, wie du eine Datei öffnest, aber wenn man eine Datei ganz normal zum Lesen-/Schreiben öffnet (z.B. FileMode.Open), wird die alte Datei sicherlich nicht gelöscht (das würde sonst ja bedeuten, dass auch der alte Dateiinhalt weg wäre).

Klar gibt es noch Sondermodi wie FileMode.Truncate, die die alte Datei löschen bzw. auf 0 Bytes setzen (wie Manfred bereits erwähnte) - aber davon handelt der Tipp ja nicht (System.IO.File.OpenWrite() verwendet ebenfalls FileMode.OpenOrCreate).

JangoF schrieb:
Zitat:


Kann man schön selbst mal sich ansehen in dem man ein kleines
VB oder VBA Programm schreibt.

Dort öffnet man eine Datei zum schreiben die es bereits gibt.
Am besten eine größere damit man den Speicherverbrauch besser
erkennen kann.
Vor dem Start des Programms schaut man sich die Eigenschaften
des Laufwerks an und merkt sich den belegten und freien
Speicherplatz.
Dann startet man das Programm und führt nur die Zeile zum
öffnen der Datei aus und hält das Programm dort an.
Der Zugriff auf die Datei bleibt bestehen, die Datei bleibt
geöffnet.
Dann sieht man das die neue Datei eine größe von 0 hat und in
den Eigenschaften des Laufwerks ist der komplette
Speicherplatz der alten Datei wieder freigegeben worden.


Ich habe mal eine Datei mit 4,3 GB unter Verwendung eines FileStreams mit FileMode.OpenOrCreate zum Lesen bzw. Schreiben geöffnet, und auf Position 104.857.600 dann 1.000 Bytes überschrieben. Sowohl vor als auch nach dem Öffnen / Schreiben war die Größe der Datei (und der freie Speicherplatz auf dem Laufwerk) der gleiche.

Ich hab allerdings nicht nachgesehen, welche Sektoren die Datei belegt (und ob es nach dem Schreibzugriff immer noch die gleichen sind).

Was mir bei dem Tipp allerdings auffällt, ist, dass die Datei sofort nach dem Schreiben gelöscht wird - in dem Fall könnte es möglicherweise aber passieren (bei kleineren Dateien), dass Windows noch die geschriebenen Daten im Cache hat und sie nach dem Löschaufruf erst gar nicht mehr auf die Festplatte schreibt, sondern die Datei sofort löscht (bin mir aber nicht sicher).

Beitrag wurde zuletzt am 11.06.12 um 14:30:23 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: JangoF
Datum: 11.06.12 14:58

Natürlich gibt es Schreibvorgänge ohne das die Datei gelöscht wird.
Z.B. bei Datenbanken wo abschnittsweise gelesen und geschrieben werden kann.
Aber ein normales schreiben einer Datei löst immer das löschen einer Gleichnamigen im voraus aus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: JangoF
Datum: 11.06.12 15:07

Es gibt halt den Modus wie er z.B. bei Datenbanken verwendet wird wo man Abschnitte lesen und schreiben kann.
Trotzdem ist nicht sichergestellt das der Cluster an die selbe Stelle geschrieben wird.
Bei aktivierten Schattenkopien wird z.B. der Cluster nicht in jeden Fall überschrieben.
Schliesslich werden die Daten ja für eine ältere Version der Datei noch benötigt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Tipp 1975: Datei sicher löschen 
Autor: Manfred X
Datum: 11.06.12 15:26

Hallo!

Schattenkopien sind eine spezielle Windows-Funktionalität
und werden im Rahmen von Wiederherstellungspunkten angelegt,
falls der User entsprechende Einstellungen vorgenommen hat.

Der Zugriff auf Filestreams ändert die von einer Datei
belegten Cluster nur, wenn im Rahmen des Schreibens von Daten
die Datei verlängert wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel