2011-01-01 3 views
1

Ich konnte SetFilePointerEx ganz gut verwenden, wenn nur die Position eingestellt wird.Wie verwende ich SetFilePointerEx, um zum Ende einer physischen Festplatte zu gehen?

SetFilePointerEx(PD, 512, @PositionVar, FILE_BEGIN); 
SetFilePointerEx(PD, 0, @PositionVar, FILE_CURRENT); 

Beide arbeiten; Ich kann Positionen festlegen und sogar meine aktuelle überprüfen. Aber wenn ich FILE_END gemäß der Dokumentation einstellen, egal was der zweite Parameter ist und ob ich einen Zeiger für den dritten Parameter zur Verfügung stelle oder nicht, scheitert es sogar an einem gültigen Handle, das viele andere Operationen ohne Fehler verwenden können.

Zum Beispiel:

SetFailed := SetFilePointerEx(PD, 0, @PositionVar, FILE_END); 
SetFailed := SetFilePointerEx(PD, 0, nil, FILE_END); 

Was ich gesagt, es funktioniert nicht. Ich arbeite mit einem Griff zu einer physischen Festplatte und es hat definitiv ein Ende. SetFilePointer funktioniert gut, aber es ist nur ein bisschen mehr Ärger als ich es möchte.

Es ist nicht das Ende der Welt, sondern was passiert.

+0

Schöne bearbeiten Rob, Titel ist jedoch nicht unbedingt korrekt. Ich habe nur versucht, den Platz von den physischen Medien zu bekommen. Was theoretisch mit der Methode gemacht werden könnte, scheint jedoch kein gültiger Weg mehr zu sein. Suchbegriffe für jemanden mit dem Problem, wo in dem alten Titel, aber ich schätze die Post aufräumen, obwohl ich bezweifle, dass jemand Hilfe aus dieser bestimmten Q & A-Sitzung finden wird. Danke, wer es gewählt hat, ich kann endlich abstimmen :) – SuicideClutchX2

+0

@Suicide, lies die Antworten, die du zu dieser Frage hast: http://StackOverflow.com/Questions/4567422/ Ich habe dir bereits gesagt, dass SetFilePointer nicht funktioniert Mit FILE_END und Disk-Geräten habe ich Ihnen eine Routine gegeben, die Ihnen hilft, den Dateizeiger überall hin mit einem int64 zu bewegen. David zeigte Ihnen eine schöne Möglichkeit, die Gerätegröße ohne Verwendung von Hacky-Code zu erhalten. Warum musst du die gleiche Frage noch einmal stellen? –

+0

war besser vor Änderung –

Antwort

3

Sie können dies nicht tun, wie Sie herausgefunden haben. Sie müssen von Anfang an oder aktuell suchen. Verwenden Sie DeviceIoControl, um die Größe des Geräts herauszufinden.

+0

Das war das nächste, woran ich arbeiten würde und ich weiß es zu schätzen, dass du das vorher schon angedeutet hast. Ich dachte mir, du würdest mich gerne schlagen, um etwas zu halten, was wie derselbe Weg aussieht. Microsoft hast versagt, oh warte, das sind keine Neuigkeiten. Die Antwort wird in ein paar Minuten freigestellt, wenn es mir erlaubt. – SuicideClutchX2

+0

@ suicide, wenn es mit der nicht ex-Version dann funktioniert, warum nicht verwenden Sie das. Die GpHugeFile-Einheit, mit der ich verlinkt habe, gibt Ihnen ein Beispiel, wie Sie es zur Arbeit bringen können.> 2gb –

+0

Ich werde mir die Einheit ansehen, die ich nur auf dieser einen Seite gesehen habe. Ich habe ein wenig Probleme mit dem Konzept der hohen und niedrigen Ordnung Zahlen mit SetFilePointer und wie man sie in eine 64-Bit-Variable kombinieren, so dass ich den Endwert lesen kann. Ich verstehe es auf der Bit-Ebene kann es einfach nicht funktionieren YET ... Ich werde es tun. – SuicideClutchX2

Verwandte Themen