Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateFile, Как открыть для перезаписи? 
:(
    Опции темы
RYB
Дата 14.4.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Программа читает содержимое сектора и меняет определенные значения, а затем перезаписывает старый сектор.

Код

...
        hDrive = CreateFile(
            lpDriveName,
            GENERIC_READ| GENERIC_WRITE,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_WRITE_THROUGH,
            NULL);

        if (hDrive == INVALID_HANDLE_VALUE)
        {
            PrintError();
            return 1;
        }
        buf = new unsigned char[dwBytesPerSect];
        SetFilePointer(hDrive, (sector-1) * dwBytesPerSect, NULL, FILE_BEGIN); //c 1
        ReadFile(hDrive, buf, dwBytesPerSect, &dwRead, NULL);

        for (n = 0; n < dwBytesPerSect; n+=16)
            {
            printf("# %x\t",sector*512+n);
            for(int j=0;j<16;j++)
            printf("%c", buf[n+j]);
            printf("\n",n);
            if ((buf[n]==229)||(buf[n]==-27))
                {
                   buf[n]='R';
                }
            }


        HANDLE hWrite=CreateFile (lpDriveName,
                                                    GENERIC_WRITE,FILE_SHARE_WRITE,
                                                    NULL,OPEN_ALWAYS,NULL,NULL);
        bRet=WriteFile(hWrite, (LPVOID)buf, dwBytesPerSect, &dwWritten, NULL);
        CloseHandle(hDrive);
        CloseHandle(hWrite);
        printf("%s\n",buf);
        if (!bRet)
        {
        printf("Failed while writing to disk.");
        }
        else
        {
        printf("Done %i",dwWritten);
        }
...


Собственно сама перезапись и не работает. Наскольно я понимаю - для записи хэндл не правильно создан. 

Поскажите мне пожайлуста: "как правильно?".
PM MAIL WWW   Вверх
Greeen
Дата 14.4.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 7
Всего: 18



Ты хочешь перезаписать некоторый участок файла? Не получицца.

Это сообщение отредактировал(а) Greeen - 14.4.2007, 11:34


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
RYB
Дата 14.4.2007, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Я хочю изменить рут сектора (20-й) к примеру на дискете
PM MAIL WWW   Вверх
RYB
Дата 15.4.2007, 13:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Все исправил - терь работает:
Код

        hDrive = CreateFile(
            lpDriveName,
            GENERIC_READ| GENERIC_WRITE,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_WRITE_THROUGH,
            NULL);

        ...
        buf = new unsigned char[dwBytesPerSect];
        SetFilePointer(hDrive, (sector-1) * dwBytesPerSect, NULL, FILE_BEGIN); //c 1
        ReadFile(hDrive, buf, dwBytesPerSect, &dwRead, NULL);
        ....
        SetFilePointer(hDrive, (sector-1) * dwBytesPerSect, NULL, FILE_BEGIN);
        bRet=WriteFile(hDrive, (LPVOID)buf, dwBytesPerSect, &dwWritten, NULL);

        CloseHandle(hDrive);

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.