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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Tolys
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 63
14.09.2011, 21:05     Драйвер для чтения CD-ROM #1
Есть код программы, которая должна считывать данные с 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);
                }
        }
}
Если есть неточности, подскажите, как правильно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2011, 21:05     Драйвер для чтения CD-ROM
Посмотрите здесь:

C++ функция для чтения из файла в матрицу
Открытие бинарного файла для чтения C++
C++ составить программу для чтения файлов
Открытие файла для чтения/записи C++
Как открыть файл одновременно для чтения и для записи? C++
Организовать запись и чтения из файла для 3 программ C++
Написать функции для чтения/записи отдельных бит для любой записи из данного набора C++
C++ Каким образом после чтения из файла, узнать позицию для чтения следующего куска байт

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tolys
1 / 1 / 0
Регистрация: 29.03.2010
Сообщений: 63
30.09.2011, 10:22  [ТС]     Драйвер для чтения CD-ROM #2
Он правильный_)
-=ЮрА=-
30.09.2011, 10:24     Драйвер для чтения CD-ROM
  #3

Не по теме:

Цитата Сообщение от Tolys Посмотреть сообщение
Скажите, он правильный или нет? Просто меня уверяют, что не правильный:
- думаю возникнут проблеммы при чтении многосессионных дисков, но это лишь моё мнение...

Yandex
Объявления
30.09.2011, 10:24     Драйвер для чтения CD-ROM
Ответ Создать тему
Опции темы

Текущее время: 02:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru