- - PR -
C言語でハードディスクに直接書き込む方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-25 13:58
Windows環境でハードディスクに直接読み書きするためのテスト目的で、
以下のようなプログラムを作成しましたが、 読み込みはうまくいくものの書き込みができません。 どこが問題かご指摘いただけないでしょうか。 プログラムの修正箇所を最低限にできればよりベストだと考えています。
a.exe \\.\PhysicalDrive2 c:\log.txt ==> それらしいもの (log.txt) が作成されている。 a.exe c:\log.txt \\.\PhysicalDrive2 ==> 「\\.\PhysicalDrive2」について、Invalid Argument エラーが出力されて書き込めない。 | ||||||||
|
投稿日時: 2009-02-25 15:50
これフォーマットするプログラムですか?
windows環境で引数2個以上で物理ドライブを2つ目に指定すると、 フォーマットされそうな気がするんですが。 そのまま実行するのは少々危険な感じがするので実行してませんが、
読み込みはスキップされているだけで メモリを初期化しているだけでしょう。 (読み込みはうまく行ってないと思います) # 追記修正 # すいません、strcmpの戻り値勘違いしてました。読み込めてると思います。
とありますが、「Invalid Argument」引数の個数をチェックしている箇所で出力しているようですので、2個以上引数指定していれば出ない気がします。 [ メッセージ編集済み 編集者: デューン 編集日時 2009-02-25 19:22 ] | ||||||||
|
投稿日時: 2009-02-25 16:25
返信ありがとうございます。
> これフォーマットするプログラムですか? 最終的にそういうプログラムにすることを想定しています。 > とありますが、「Invalid Argument」引数の個数をチェックしている箇所で出力している > ようですので、2個以上引数指定していれば出ない気がします。 不足していてすみません。実際の出力はこんな感じです。
あと、引数がともに通常のファイル名の場合は期待通りコピーされることを確認しています。 [ メッセージ編集済み 編集者: あんとれ 編集日時 2009-02-25 16:25 ] | ||||||||
|
投稿日時: 2009-02-25 16:48
ファイルオープンモードの問題だと思います。
wbの場合は新規作成となるので× wb+もクリアできず×です。 ちなみに、成功するとそのハードディスクのMBRは壊れ、 特に起動ドライブだった場合は起動しなくなると思いますので 仮想環境などで行うといいでしょう。 # a.exe c:\log.txt \\.\PhysicalDrive2 # 理解されていると思いますが、という字面からは一見ファイルコピーに見えますけどそうはなりません。 | ||||||||
|
投稿日時: 2009-02-25 17:07
ソースを大幅に書き換えない限り書き込みできないのでしょうか?
3番目のHDDの先頭にlog.txtの内容が書き込まれ、後ろの部分はそのままになると認識しているのですが・・・ ちなみに、テスト用のハードディスクは設置したばかりの仮想HDD (VMware) でまだデータが入っていません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2009-02-25 17:19
いえ、rb+でなら成功するかもしれないと思っています。 (読み書きモード+ファイル存在時はなにもしない)
HDDの先頭はフォーマットによって、MBRやパーティションなどの情報が入っています。 後ろの部分はそのままですが先頭の情報が失われると、Windows用ドライブとして認識しなくなる可能性もあります。 (もう一度フォーマットすればいいだけですし、物理アクセス専用のドライブであれば問題ないと思います) # 仮想ディスクなら特に問題ないですね。 # 物理ディスクでやっている場合、ミスで大惨事というのがありえますので老婆心ながら指摘したまでです。 | ||||||||
|
投稿日時: 2009-02-25 17:45
ご指摘のとおり "rb+" を指定したところうまくいきました。
"r+" と "w" の違い、いまいち理解していませんでした。 ありがとうございました! |
1