Форум программистов, компьютерный форум CyberForum.ru

Драйвер для чтения CD-ROM - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Непонятки с размером массива http://www.cyberforum.ru/cpp-beginners/thread351555.html
Почему так можно: int main() { int SIZE=10; char ch={'a','b','c','d','e','f','g','h','i','\0'}; for(int i=0;i<SIZE;i++) cout<<ch; cout<<endl<<endl; for(char *ptr=ch;*ptr!='\0';ptr++)
C++ Задача ал-Караджи Кто может написать код на СИ для сией шляпы? Найти площадь прямоугольника, основание которого в n раз больше высоты, а площадь численно равна периметру. http://www.cyberforum.ru/cpp-beginners/thread351554.html
Найти количество групп с пятью символами C++
Обьясните пожалуста задачу: Дана строка, состоящая из групп нулей и единиц. Каждая группа отделя- ется от другой одним или несколькими пробелами. Найти количество групп с пятью символами.
C++ Классы. Протокол класса. Конструкторы и деструкторы
помогите пожалуйста разобраться с заданием Создать класс «матрица». Данный класс должен содержать элементы типа int, определяющие число строк, столбцов и состояние ошибки. Определить конструктор без параметров, конструктор с одним параметром, конструктор с двумя параметрами, деструктор. Определить метод, возвращающий значение элемента матрицы и его адрес. Определить функцию печати матрицы....
C++ Списки! Проблемы!( http://www.cyberforum.ru/cpp-beginners/thread351524.html
Всем привет) Мне задали задание создать список и ввести туда "abc", а потом ввести еще "f" и "e", то есть чтобы получилось "abfec". Как это сделать и объясните пожалуйста про списки с самого нуля, а то в книгах ничего не понятно(((( Спасибо!. Добавлено через 17 минут Ну кто-нибдуь объясните пожалуйста!!!!!!!!!!
C++ Удалить процес господа програмисты подскажите 1 - как можно удалить процесс програмно,только не через system 2 - как можно запустить процес програмно, тоже только не через system Заранее всем огромное спасибо!!! подробнее

Показать сообщение отдельно
Tolys
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 63

Драйвер для чтения CD-ROM - C++

14.09.2011, 21:05. Просмотров 1145. Ответов 2
Метки (Все метки)

Есть код программы, которая должна считывать данные с CD-ROM'а. Скажите, он правильный или нет? Просто меня уверяют, что не правильный:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
 
// ПАРАМЕТРЫ ПО УМОЛЧАНИЮ
#define DEF_FN              "sector"
#define DEF_TO              0x666
#define DEF_FROM            0x000
#define CDROM_SECTOR_SIZE   2048  // for MODE1/MODE2FORM1 only!
 
// АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ
#define argCD     (argv[1])
#define argFN     ((argc > 2)?argv[2]      :DEF_FN)
#define argFROM   ((argc > 3)?atol(argv[3]):DEF_FROM)
#define argTO     ((argc>4)?(atol(argv[4])>argFROM)?atol(argv[4]):argFROM:DEF_TO)
 
main(int argc, char **argv)
{
        int      a;
        FILE     *f;
        HANDLE   hCD;
        char     *buf;
        DWORD    x_read;
        char     buf_n[1024];
 
        // ПРОВЕРЯЕМ АРГУМЕНТЫ
        if (argc<2)
        {
                printf("USAGE: cooked.sector.read PhysCD [filename] [from] [to]\n");
                printf("\tPhysCD   - physical name of CD (\"\\\\.\\G:\")\n");
                printf("\tfilename - file name to store follow sector\n");
                printf("\tfrom     - start sector\n");
                printf("\tto       - end sector\n");
                return 0;
        }
 
        // TITLE
        fprintf(stderr,"cooked sector reader for NT\n");
 
        // ВЫДЕЛЯЕМ ПАМЯТЬ
        buf=malloc(CDROM_SECTOR_SIZE);if (!buf){printf("-ERR:low memory\n");return -1;}
 
        // ОТКРЫВАЕМ УСТРОЙСТВО
        hCD=CreateFile(argCD, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
        if (hCD == INVALID_HANDLE_VALUE) {
                printf("-ERR: error CreateFile(%s,....)\n", argCD); return -1;
        }
 
        // INFO
        printf("read sector from %04d to %04d in %s file\n", argFROM, argTO, argFN);
 
        // ПОЗИЦИОНИРУЕМ УКАЗАТЕЛЬ НА ПЕРВЫЙ ЧИТАЕМЫЙ СЕКТОР
        SetFilePointer (hCD, CDROM_SECTOR_SIZE * argFROM, NULL, FILE_BEGIN);
 
        // ЧИТАЕМ СЕКТОРА ОДИН ЗА ДРУГИМ
        for (a = argFROM; a <= argTO; a++)
        {
                // читаем очередной сектор
                if (ReadFile(hCD, buf, CDROM_SECTOR_SIZE, &x_read, NULL) && x_read)
                {
                        // записываем только что считанный сектор в файл
                        sprintf(buf_n,"%s[%04d].dat",argFN, a);
                        if (f=fopen(buf_n,"wb")){fwrite(buf, 1, x_read, f); fclose(f);}
                        printf("sector [%04d.%04d] read\r",a, argTO);
                }
                        else
                {
                        printf("sector %04d read error\n",a);
                }
        }
}
Если есть неточности, подскажите, как правильно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru