2011-01-29 8 views
0

fstreamでフロッピーディスクを開く方法は? 私はこのような何かしようとしている: を、それは常にあなたは、デバイスを開くためのfstreamを使用することはできませんエラーfstreamでフロッピーを開ける方法

#include <iostream> 
#include <fstream> 

using namespace std; 

char a='k'; 

int main() 
{ 
    fstream stream; 
    stream.open("\\\\.\\A:", ios::binary); 

    if(stream.good() == false) 
    { 
      cout <<"Error"; 
    } 

    for(int i = 0 ; i < 512 ; i++) 
    { 
      stream >> a; 
      //cout << a; 
    } 
    stream.close(); 
    cin.get(); 
    return 0; 
} 

答えて

2

を返します - そのデバイスに含まれているファイルシステム内のファイルだけを。デバイスにアクセスするには、オペレーティングシステム固有の機能を使用する必要があります。

編集:fstreamを使用してフロッピーデバイスを開くことは可能かもしれませんが、システムへのこのレベルのアクセスは標準C++ライブラリによって提供される抽象レベルを超え、OS固有の機能を使用する必要があります代わりに。

+0

OSによっては、実際にfstreamで直接デバイスにアクセスすることが可能です。 OPが指定されているはずですが、確かに_impossible_ではありません。 – bdonlan

+0

私はVistaを持っているので、私はwinapiルーチンを使用する必要がありますか?私はどこかで私の方法を見たと思うので、それを試しています。 – Neomex

+0

@bdonlan:fstreamを使用するファイルと同じように、デバイスを開いてバイトストリームとしてアクセスすることは合理的ですか?それは不可能ではないかもしれませんが、それはどちらも有用ではありませんか?あなたはそのようにするコードを書いていますか? – trojanfoe

0

this MSDN documentationの備考のセクションで説明したように、デバイスファイルはFILE_SHARE_READ|FILE_SHARE_WRITE共有モードで開く必要があります。デフォルトでは、fstreamはこれをサポートしていません。低レベルのwin32 CreateFile APIを使用してファイルへのハンドルを直接開き、次にReadFileWriteFileを使用して読み取り/書き込みする必要があります。完了したら、CloseHandleでハンドルを閉じます。

+0

コンパイラは_O_RDONLY、_sopen、およびattach()を認識していません。 – Neomex

+0

@Neomex、これらはMicrosoftの拡張です。コンパイラがそれらをサポートしていない場合は、代わりに低レベルのAPIを使用する必要があります。 – bdonlan

+0

また、このすべてがあなたがWindows上にいることを前提としていることは言うまでもない。あなたが窓にない場合は、 "\\。\ a:"パスは_at all_で動作しません。全く異なる方法を使用する必要があります。 – bdonlan

関連する問題