Как открыть дискету с помощью fstream - PullRequest
0 голосов
/ 29 января 2011

Как открыть дискету с помощью 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 ]

2 голосов
/ 29 января 2011

Вы не можете использовать fstream для открытия устройства - только файл в файловой системе, содержащейся на этом устройстве.Для доступа к устройству необходимо использовать специальные функции операционной системы.

РЕДАКТИРОВАТЬ: Для ясности, возможно, можно открыть дискету с помощью fstream, но этот уровень доступа к системе выходит за уровень абстракциипредоставляется стандартной библиотекой C ++, поэтому вместо нее следует использовать функции, специфичные для ОС.

0 голосов
/ 29 января 2011

Как описано в разделе «Примечания» этой документации MSDN , файлы устройств должны открываться в режиме совместного использования FILE_SHARE_READ|FILE_SHARE_WRITE. По умолчанию fstream не поддерживают это. Вам нужно будет напрямую открыть дескриптор файла с помощью низкоуровневого API win32 CreateFile, затем читать / писать с использованием ReadFile и WriteFile. Когда закончите, закройте ручку с помощью CloseHandle.

...