2 / 2 / 1
Регистрация: 11.05.2016
Сообщений: 27
1

Проверка на наличие CD диска в дисководе

26.09.2016, 09:40. Показов 2228. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый!

Нужна проверка на наличие CD диска в дисководе ...

какая функция для этого нужна?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2016, 09:40
Ответы с готовыми решениями:

проверить наличие диска в дисководе
Как с помощью ассемблера (компилятор masm32) проверить наличие диска в дисководе. скорее всего надо...

Проверка диска на наличие ошибок
После того как win 7 слетела я решил установить win 8.1 диск d который я не отформатировал т.к. там...

Проверка диска на наличие ошибок сломала диск
Багала программа установленная на съёмном hdd захотел её переустановить после удаления остались...

Проверка диска на наличие ошибок в домашних условиях
Всем привет ;) Ситуация - Есть комп рабочий и есть HDD (samsung SP0822N) - вроде как...

11
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
26.09.2016, 10:20 2
Это несложно. Тут.
1
72 / 73 / 23
Регистрация: 14.10.2013
Сообщений: 547
26.09.2016, 10:27 3
Раньше было никак. Сейчас может что-то придумали. Хотя на врят ли. Диски то сейчас мало кто использует.
1
2 / 2 / 1
Регистрация: 11.05.2016
Сообщений: 27
26.09.2016, 11:21  [ТС] 4
Это несложно. Тут.
к сожалению, ссылка не работает
0
25 / 25 / 22
Регистрация: 18.09.2014
Сообщений: 218
26.09.2016, 11:40 5
Ольга_келешек, ссылка рабочая
1
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
26.09.2016, 12:59 6
http://www.sources.ru/delphi/f... rive.shtml
http://z-oleg.com/delphi/hardw1.htm
гугл забанен?
1
2 / 2 / 1
Регистрация: 11.05.2016
Сообщений: 27
26.09.2016, 13:36  [ТС] 7

вот этот пример у меня был...
Delphi
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
function DiskInDrive(Drive: Char): Boolean;
var
   ErrorMode: word;
begin
   { переводим в верхний регистр }
   if Drive in ['a'..'z'] then Dec(Drive, $20);
   { убеждаемся, что это буква }
   if not (Drive in ['A'..'Z']) then
      raise EConvertError.Create('Not a valid drive ID');
   { отключаем критические ошибки }
   ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
   try
      { диск 1 = a, 2 = b, 3 = c, и т.д. }
      if DiskSize(Ord(Drive) - $40) = -1 then
         Result := False
      else
         Result := True;
   finally
      { восстанавливаем старый режим ошибок }
      SetErrorMode(ErrorMode);
   end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 var
  x: integer;
 begin
  x := DiskInDrive('a');
  case x of
    0: ShowMessage('Disk is there !');
    1: ShowMessage('Disk is empty !');
    2: ShowMessage('No disk in drive !');
  else
       ShowMessage('Disk not formatted !');
  end; //case
 end;

на строку x := DiskInDrive('a');

ошибка.. [DCC Error] Unit1.pas(64): E2010 Incompatible types: 'Integer' and 'Boolean'
1
82 / 82 / 39
Регистрация: 17.02.2016
Сообщений: 464
26.09.2016, 13:42 8
Лучший ответ Сообщение было отмечено Ольга_келешек как решение

Решение

потому что проверять надо примерно так
Delphi
1
2
3
4
if DiskInDrive('j')then
begin
ShowMessage('диск обнаружен !');
end;
1
5393 / 4321 / 1060
Регистрация: 29.08.2013
Сообщений: 27,128
Записей в блоге: 3
26.09.2016, 13:44 9
Цитата Сообщение от Ольга_келешек Посмотреть сообщение
ошибка
потому что функция DiskInDrive() возвращает true\false, а вы пихаете ее результат в Integer

Добавлено через 1 минуту
а функция эта просто проверяет есть ли такой диск, а не проверяет CDROM ли это
1
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
26.09.2016, 14:02 10
Delphi
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
//Типы устройств.
type TDriveState = (DS_NO_DISK, DS_UNFORMATTED_DISK, DS_EMPTY_DISK, DS_DISK_WITH_FILES);
//....
function DriveState(Drive: String): TDriveState;
var
  Mask: String;
  SearchRec: TSearchRec;
  oldMode: Cardinal;
  ReturnCode: Integer;
begin
  oldMode:=SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    Mask:= Drive+'*.*';
    ReturnCode:=FindFirst(Mask, faAnyfile, SearchRec);
    SysUtils.FindClose(SearchRec);
    case ReturnCode of
      0: Result := DS_DISK_WITH_FILES;
      -18: Result := DS_EMPTY_DISK;
    else
      Result := DS_NO_DISK;
    end;
  except
    Result:=DS_NO_DISK;
  end;
  SetErrorMode(oldMode);
end;
 
//Проверка на съемный накопитель....
if DriveState(Root) <> DS_NO_DISK then
          begin
            if GetDriveType(Pchar(Root)) = DRIVE_REMOVABLE then //....
//
Добавлено через 8 минут
Понятнее будет вот так:

Pascal
1
if GetDriveType(PChar('D:\')) = DRIVE_REMOVABLE ..
Добавлено через 4 минуты
И посмотрите описание для GetDriveType - например CDROM это "DRIVE_CDROM"
2
97 / 97 / 25
Регистрация: 25.04.2016
Сообщений: 525
26.09.2016, 14:18 11
Вот пример работы GetDriveType (консольное приложение).
Вложения
Тип файла: 7z enumdrives.7z (672 байт, 6 просмотров)
2
2 / 2 / 1
Регистрация: 11.05.2016
Сообщений: 27
27.09.2016, 05:28  [ТС] 12
потому что проверять надо примерно так
Спасибо, да действительно недосмотрела...

Добавлено через 11 минут
Уф, разобралась.... вот такое решение в итоге у меня получилось, слегка коряво... но в целом устраивает)


Delphi
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
function DiskInDrive(Drive: Char): Boolean;
var
   ErrorMode: word;
begin
   { переводим в верхний регистр }
   if Drive in ['a'..'z'] then Dec(Drive, $20);
   { убеждаемся, что это буква }
   if not (Drive in ['A'..'Z']) then
      raise EConvertError.Create('Not a valid drive ID');
   { отключаем критические ошибки }
   ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
   try
      { диск 1 = a, 2 = b, 3 = c, и т.д. }
      if DiskSize(Ord(Drive) - $40) = -1 then
         Result := False
      else
         Result := True;
   finally
      { восстанавливаем старый режим ошибок }
      SetErrorMode(ErrorMode);
   end;
end;
 
 
procedure TForm1.Button2Click(Sender: TObject);
var
  BitMask   : Set of 0..25;
  DriveChar : Char;
  I,k,w  : Integer;
  St, key : String;
begin
Memo1.Lines.Clear;
Memo2.Lines.Clear;
  Integer(BitMask) := GetLogicalDrives;
  if Integer(BitMask) = 0 then
  else
  begin
     for I := 0 to 25 do
      if I in BitMask then
      begin
        DriveChar := Char(I + Ord('a'));
        case GetDriveType(PChar(DriveChar + ':\')) of
          0               : St := 'drive type cannot be determined';
          1               : St := 'root directory does not exist';
      DRIVE_REMOVABLE : St := 'Съемный диск';
          DRIVE_FIXED     : St := 'Локальный диск';
          DRIVE_REMOTE    : St := 'remote (network)';
          DRIVE_CDROM     : St := 'CDROM';
          DRIVE_RAMDISK   : St := 'RAM disk';
        end;
    
      if ((St = 'CDROM') and (DiskInDrive(DriveChar)) and (FileExists(DriveChar + ':'+'\text.txt')))  
then  begin     fName :=  DriveChar + ':'+'\text.txt';
 
AssignFile(f, fName);
  Reset(f);
 while not EOF(f) do   begin
    readln(f, buf);  ............................................................
0
27.09.2016, 05:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2016, 05:28
Помогаю со студенческими работами здесь

Windows XP не видит диска в дисководе
Здравствуйте ув. формучане! У меня такая проблема, я вставляю диск с игрой в дисковод, система его...

Автоматический запуск диска в дисководе (Windows 7)
Подскажите пожалуста как сделать что бы диск автоматически запускался после того как вставляеш в...

Виснет компьютер при наличии CD/DVD диска в дисководе
С недавнего времени, при вставке CD/DVD диска в дисковод, комп полностью виснет (включая клаву с...

Как убрать сообщение об ошибке отсутствия диска в дисководе
Моя программа периодически копирует некоторые файлы с CD-диска. Но, если я в этот момент открываю...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru