AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Vista: Datei schreiben auf Wechseldatenträger
Thema durchsuchen
Ansicht
Themen-Optionen

Vista: Datei schreiben auf Wechseldatenträger

Ein Thema von ChrisE · begonnen am 11. Okt 2007 · letzter Beitrag vom 12. Okt 2007
Antwort Antwort
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Vista: Datei schreiben auf Wechseldatenträger

  Alt 11. Okt 2007, 16:53
Hallo alle miteinander.

folgendes Problem:
1. SD-Karte mit Vista formatiert
2. Dateien im Explorer auf Karte ziehen
3. Mit einem Programm Dateien auf dieser Karte Anpassen (nur ein Byte verändern)
- bis hier hin klappt alles -
4. Die Karte aus dem Slot ziehen und wieder einstecken -> Fehlermeldung von Vista.

###########
Möchten Sie "MySD (G: )" überprüfen und reparieren?

[Content]
Es besteht eventuell ein Problem mit einigen Dateien auf diesem Gerät bzw. Datenträger. Dies kann auftreten, wenn ein Gerät bzw. Datenträger entfernt wird, bevor alle Dateien darauf geschrieben wurden.

[Überprüfen und reparieren (empfohlen)] [Ohne Überprüfung fortsetzen]
###########

Die Daten befinden sich aber auf der Karte (siehe Fehlermeldung). Die Dateien sind auch alle IO.

Geh ich im Programm hin und sorge per DeviceIOControl dafür, dass der Datenträger "ausgeworfen" wird tritt die Fehlermeldung nicht auf.
Jetzt möchte ich aber nicht jedesmal wieder die Karte neu Mounten bzw. von Hand hingehen Karte rein / raus (damit System sie Mountet).

Was muss man tun (auser unmount) damit dieser Fehler nicht mehr auftritt. Unter XP geht dass ganze ohne Motzen und maulen. Auch wenn man die scheinbar fehlerhafte Karte (nach Aussage von Vista) dann in einen XP-Rechner schiebt. XP hat nichts daran aus zu setzten.

Danke für Hilfe / Infos.

Gruß Chris

P.S.: Datenträger ist für schnelles entfernen optimiert
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 11. Okt 2007, 16:56
das Problem ist dass, die daten nicht sofort geschrieben werden. Wechseldatenträger nach Schreibzugriffen immer Auswerfen oder etwas Warten!
Markus Kinzler
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#3

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 11. Okt 2007, 16:58
Kann man nicht gerade für solche Dinge in den Eigenschaften des Laufwerks oder der Hardware oder so irgendwo ein Häkchen setzen, dass die Daten sofort geschrieben werden? Mir war so, als hätte ich das mal gesehen.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 11. Okt 2007, 17:04
Zitat von OregonGhost:
Kann man nicht gerade für solche Dinge in den Eigenschaften des Laufwerks oder der Hardware oder so irgendwo ein Häkchen setzen, dass die Daten sofort geschrieben werden? Mir war so, als hätte ich das mal gesehen.
Ganz genau. Siehe P.S. vom ersten Post -> für schnelles entfernen optimieren

Zitat von mkinzler:
das Problem ist dass, die daten nicht sofort geschrieben werden. Wechseldatenträger nach Schreibzugriffen immer Auswerfen oder etwas Warten!
Das kurze warten alleine reicht irgendwie nicht. Gibt es eine Möglichkeit Abzufragen, ob die Daten geschrieben sind. So auf die Art:
Delphi-Quellcode:
// nicht sehr schön aber so in der Art
while DeviceNotReady do Application.ProcessMessages;
Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#5

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 11. Okt 2007, 17:15
Sowas, das hatte ich tatsächlich überlesen. Hatte aber mit meinen Karten / USB-Sticks das Problem noch nicht.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 11. Okt 2007, 17:17
Nochmals zur Verdeutlichung:
Delphi-Quellcode:
FFileHandle := CreateFile(PAnsiChar(AFileName), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ,
                          nil, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS or FILE_FLAG_WRITE_THROUGH, 0);
Der Parameter FILE_FLAG_WRITE_THROUGH sollte eigentlich genau dafür sorgen, dass es sofort geschrieben wird. Es gibt ebenso noch den Parameter FILE_FLAG_NO_BUFFERING. Hierbei wird man dann gezwungen, in der Sektorengröße zu schreiben. Aber auch das bringt mich immer wieder zur selben Fehlermeldung.
Soll heißen, ich brauche die Möglichkeit, Windows Vista klar zu machen, dass ich jetzt fertig bin mit schreiben ( war eigentlich für mich immer CloseHandle) und dann die möglichkeit zu erfahren wann Windows wirklich fertig ist mit schreiben.
Wobei ich nochmals sagen möchte: Die Veränderung in der Datei ist wirksam auf der Karte (trotz Fehlermeldung!)

Gruß, Chris

Edit:
Zitat von OregonGhost:
Sowas, das hatte ich tatsächlich überlesen. Hatte aber mit meinen Karten / USB-Sticks das Problem noch nicht.
Keine Problem. Überlesen ist nicht schlimm. Du willst wenigstens helfen
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Vista: Datei schreiben auf Wechseldatenträger

  Alt 12. Okt 2007, 10:08
Hallo,

also ich habe da noch ein bisschen in Richtung DeviceIOContro weiter gesucht und das gefunden was ich wollte.
Die Lösung sieht wie folgt aus (Die Funktion war hier irgendwo auch so im Forum bei einer Frage dabei).

Jedes mal wenn man fertig ist mit schreiben und das typische CloseFile oder FileStream.Free kommt einfach noch folgender Aufruf:

Delphi-Quellcode:
function Umount(Laufwerk: Char): Boolean;
const
  IOCTL_STORAGE_EJECT_MEDIA = $2D4808;
  FSCTL_DISMOUNT_VOLUME = $90020;
var
  hDrive: Cardinal;
  bytesRet: Cardinal;
begin
  hDrive := CreateFile(PAnsiChar('\\.\' + Laufwerk + ':'),
                       GENERIC_READ or GENERIC_WRITE,
                       FILE_SHARE_READ or FILE_SHARE_WRITE,
                       nil,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL or FILE_FLAG_NO_BUFFERING,
                       0);

  if hDrive <> INVALID_HANDLE_VALUE then
  begin
    DeviceIOControl(hDrive, FSCTL_DISMOUNT_VOLUME, nil, 0, nil, 0, bytesRet, nil);
    CloseHandle(hDrive);
    result := TRUE;
  end else result := FALSE;
end;
IOCTL_STORAGE_EJECT_MEDIA sorgt dafür, dass der Fehler nicht mehr auftritt. Problem war, dass ein Zugriff auf das Medium danach nicht mehr möglich ist. Der Anwender wäre gezwungen die SD-Karte raus zu ziehen und wieder ein zu stecken.
FSCTL_DISMOUNT_VOLUME hat den richtigen Effekt. Der Datenträger wird beim nächsten Zugriffsversuch automatisch vom System wieder gemountet.
Das nur für die Leute, die irgendwann auch mal auf dieses Problem stoßen.

Danke an alle.

Gruß Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  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 13:42 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