Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11

Как добратся до накопителя (стример), подтолкните меня в нужном направлении

20.06.2014, 23:33. Показов 3872. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак, о вводных стоит только сказать, что не писал на делфи я уже лет 12-14. Ранее если и писал, то не шибко крутые проекты в плане интеграции.
Теперь о самой задаче: имеем ленточный накопитель LTO стандарта, поколение не важно пока. Хочу пока написать простой и удобный файловый менеджер с поддержкой стримеров в режиме RO, для начала.
Вопросы: 1. как вообще в делфи организуется доступ к накопителям не имеющими явного буквенного обозначения? (стриммеры ранних поколений не видно в Мой компьютер, они видны только через спец. бекап софт) 2. куда я еще могу написать, где читают профи?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2014, 23:33
Ответы с готовыми решениями:

Пните в нужном направлении!
Нужно написать программу с помощью которой можно было редактировать сторонние .exe А именно описание программы, её версия, и т.д. ...

Восстановить файлы в нужном порядке после падения внешнего накопителя.
здравствуйте,у меня такая ситуация возникла: работал с внешним жестким диском(устанавливал программу) в это время при установки программы...

Направьте в нужном направлении
Привет народ. Хочу попробовать себя в разработке игр под linux. До этого под linux ничего не писал, но есть непреодолимое желание :D В...

20
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
21.06.2014, 02:31
Цитата Сообщение от Abraxass Посмотреть сообщение
как вообще в делфи организуется доступ к накопителям не имеющими явного буквенного обозначения? (стриммеры ранних поколений не видно в Мой компьютер, они видны только через спец. бекап софт)
Никак. Это вопрос не по Дельфи.
Цитата Сообщение от Abraxass Посмотреть сообщение
куда я еще могу написать, где читают профи?
В форум по железу есс-но.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
21.06.2014, 03:45  [ТС]
разбежался "никак" чтоли? я на своей памяти делал софт на уровне биос через ядро винды, не пукайте в лужу. вопрос актуален
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
21.06.2014, 10:05
Ленточный накопитель? Это касеты и записывающие ленты чтоли? Такие устройства можно встретить только в музее. Вышли из употребления, так как скорость чтения/записи информации на них была во много раз(порядка 1000-2000) меньше скорости записи на стандартные флеш- карты или HDD. Если есть устройство для подключения этого ленточного накопителя к компьютеру и драйвер для этого накопителя, то система позволит нам делать все операции с этим устройством.
Кажись, для подключения к такому устройству надо реализовывать технологии Com-портов и подобные им.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
21.06.2014, 17:48  [ТС]
Цитата Сообщение от саша40 Посмотреть сообщение
Такие устройства можно встретить только в музее. Вышли из употребления, так как скорость чтения/записи информации на них была во много раз(порядка 1000-2000) меньше скорости записи на стандартные флеш- карты или HDD. Если есть устройство для подключения этого ленточного накопителя к компьютеру и драйвер для этого накопителя, то система позволит нам делать все операции с этим устройством.
Кажись, для подключения к такому устройству надо реализовывать технологии Com-портов и подобные им.
Не буду спорить какие накопители тормоз и кому в музей пора))) Мой старичек имеет скорость 50мб\с в среднем, а последние поколения вообще уже подошли плотно к 800мбайт\с (не путать с мбит)))) так что не то что com порта, им и scsi мало! как правило они работают через sas, fc контроллеры. но дела в другом. т.е. через скази порт к накопителю надо обращатся? через какой компонент? где примеры поискать? спасибо!
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
21.06.2014, 17:57
Цитата Сообщение от Abraxass Посмотреть сообщение
как вообще в делфи организуется доступ к накопителям не имеющими явного буквенного обозначения?
через файловые дескрипторы (CreateFile, ReadFile, WriteFile или расширенные функции (Ex) - если асинхронные вызовы)
по поводу получения символьного имени для открытия файла (CreateFile) - как вариант
SetupDiGetClassDevs function

Цитата Сообщение от саша40 Посмотреть сообщение
Такие устройства можно встретить только в музее
Матерый человечище(с) В.Ульянов
исключительно для "музейных" компьютеров
про бэкап информации слышали?
2
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
21.06.2014, 18:27
Цитата Сообщение от cotseec Посмотреть сообщение
Матерый человечище(с) В.Ульянов
исключительно для "музейных" компьютеров
про бэкап информации слышали?

Не по теме:

прости. Тогда я ещё не прочел статью в википедии.

0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
21.06.2014, 19:04  [ТС]
Цитата Сообщение от cotseec Посмотреть сообщение
через файловые дескрипторы (CreateFile, ReadFile, WriteFile или расширенные функции (Ex) - если асинхронные вызовы)
по поводу получения символьного имени для открытия файла (CreateFile) - как вариант
SetupDiGetClassDevs function
В дельфе такие обращения типа \\.\tape0\ тоже работают? И какие юниты надо подключать к проекту?
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
21.06.2014, 19:13
Цитата Сообщение от Abraxass Посмотреть сообщение
обращения типа \\.\tape0\ тоже работают?
попробуйте, если "tape0" - символьное имя, имеющегося оборудования в системе, то получите дескриптор файла для дальнейшей работы или значение ошибки (проверяйте значение, возвращаемое функцией CreateFile)
Цитата Сообщение от Abraxass Посмотреть сообщение
И какие юниты надо подключать к проекту?
для CreateFile - uses Windows
для SetupDiGetClassDevs - uses SetupApi, его (как и многие другие хейдеры) можно найти, например, у JEDI
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
22.06.2014, 20:50  [ТС]
Цитата Сообщение от cotseec Посмотреть сообщение
для CreateFile - uses Windows
В общем, начал разбиратся, у меня особенность обучатся на примерах, чтобы общую картинку быстро построить, а далее ясно будет каким деталям какое внимание стоит уделить. Но примеров по этой задаче очень мало и обрывками.
Найденный боле-менее вменяемый кусок кода:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
const BLOCK_SIZE = 512;
const BLOCKING_FACTOR = 20;
 
Procedure DoSomething;
var
  H, TapeMediaBufferSize: Cardinal;
  R: Integer;
  TapeMediaBuffer: TAPE_GET_MEDIA_PARAMETERS;
  NewTapeParams: TAPE_SET_MEDIA_PARAMETERS;
  ReadBuffer: Array[0..(BLOCK_SIZE * BLOCKING_FACTOR) - 1] of Char;
  BytesRead: Cardinal;
  FileStream: TFileSTream;
begin
  //get a handle to your tape device
  H := CreateFile('\\.\TAPE0',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
  if H = INVALID_HANDLE_VALUE then
    Exit;
  try
    //Prepare the tape for reading from the beginnning
    R := PrepareTape(H, TAPE_LOAD, false);
    IF R <> NO_ERROR then
    begin
      //use GetLastError() to find out why it failed
      exit;
    end;
    //Retrieve current tape Info
    TapeMediaBufferSize := Sizeof(TapeMediaBuffer);
    R := GetTapeParameters(H,GET_TAPE_MEDIA_INFORMATION, TapeMediaBufferSize, @TapeMediaBuffer);
    if R <> NO_ERROR then
    begin
      //use GetLastError() to find out why it failed
      Exit;
    end;
    //set the Tape Block size to that used for writing the tape. Use a block siz of 0 for 'variable block size' if your device supports it.
    NewTapeParams.BlockSize := 0;
    R := SetTapeParameters(H,SET_TAPE_MEDIA_INFORMATION , @NewTapeParams);
    if R <> NO_ERROR then
    begin
      //use GetLastError() to find out why it failed
      Exit;
    end;
    //Now Start reading
    FileSTream := TFileSTream.Create('C:\TapeContent.txt', fmCreate);
    try
      while true do
      begin
        if NOT ReadFile(H, ReadBuffer[0],BLOCK_SIZE * BLOCKING_FACTOR, BytesRead, nil) then
        begin
          //use GetLastError() to find out why it failed
          //GetLastError could tell you that you have reached a begin file marker, in which case
          //You are ready to read the next file off the tape (I think)
          Exit;
        end;
        FileSTream.WriteBuffer(ReadBuffer, BytesRead);
      end;
    finally
      FileSTream.Free;
    end;
  finally
    CloseHandle(H);
  end;
end;
 
implementation
 
{$R *.dfm}
 
end.
Ошибки при компиляции:
Delphi
1
2
3
4
5
6
7
8
Build
  [Error] Unit1.pas(28): Undeclared identifier: 'TAPE_GET_MEDIA_PARAMETERS'
  [Error] Unit1.pas(29): Undeclared identifier: 'TAPE_SET_MEDIA_PARAMETERS'
  [Error] Unit1.pas(33): Statements not allowed in interface part
  [Error] Unit1.pas(40): Undeclared identifier: 'TAPE_LOAD'
  [Error] Unit1.pas(55): Missing operator or semicolon
  [Error] Unit1.pas(24): Unsatisfied forward or external declaration: 'DoSomething'
  [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Видно, что какого-то юнита не хватает. Поиск по всей справке строки 'TAPE_GET_MEDIA_PARAMETERS' ничего не дал, ни намека в каких юнитах это может быть.
Подскажите, пожалуйста.
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
22.06.2014, 21:34
ничего не мешает описать требуемые структуры и константы:
сама структура, от родителя: TAPE_GET_MEDIA_PARAMETERS structure

Все украдено до нас (с):
Delphi and Tape Device - если класс не работает, то по крайней мере там описаны требуемые константы и структуры
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
22.06.2014, 21:38
Цитата Сообщение от Abraxass Посмотреть сообщение
Ошибки при компиляции:
Delphi
1
2
3
4
5
6
7
[Error] Unit1.pas(28): Undeclared identifier: 'TAPE_GET_MEDIA_PARAMETERS'
* [Error] Unit1.pas(29): Undeclared identifier: 'TAPE_SET_MEDIA_PARAMETERS'
* [Error] Unit1.pas(33): Statements not allowed in interface part
* [Error] Unit1.pas(40): Undeclared identifier: 'TAPE_LOAD'
* [Error] Unit1.pas(55): Missing operator or semicolon
* [Error] Unit1.pas(24): Unsatisfied forward or external declaration: 'DoSomething'
* [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Видно, что какого-то юнита не хватает. Поиск по всей справке строки 'TAPE_GET_MEDIA_PARAMETERS' ничего не дал, ни намека в каких юнитах это может быть.
Подскажите, пожалуйста.
Может ActiveX? У тебя там процедура ещё негде не объявлена. Delphi 7 сложнее устроена, чем вы думаете.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
23.06.2014, 22:39  [ТС]
Цитата Сообщение от cotseec Посмотреть сообщение
ничего не мешает описать требуемые структуры и константы:
В общем все причесал, юнит utapeapi по частям собрал. Сейчас при компиле спотыкается только о константу TAPE_LOAD. Тут нашел какие-то значения http://msdn.microsoft.com/en-u... s.85).aspx. 0L - это что? стринг?)

Добавлено через 5 часов 16 минут
Разобрался!)) Теперь в коды ошибок уперся, GetLastError что-то выдает, а что это значит -хз...

Добавлено через 48 минут
Ура! Вышло сделать "Достать кассету" - досталась. Приходится только юнит переписывать, тайм-эррор ошибки вечно в этом юните происходят.
теперь уперся в то, как сформировать список файлов и папок? не пойму... Простыми функциями помнится перебором с указанием пути это делается, но со стримером четкого пути же не укажешь... как быть?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,608
24.06.2014, 01:58
Цитата Сообщение от Abraxass Посмотреть сообщение
разбежался "никак" чтоли? я на своей памяти делал софт на уровне биос через ядро винды
Вот только врать не надо. Ничего ты сам не делал, кроме поиска кода во всемирной помойке.
Все твои последующие посты это подтверждают.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
25.06.2014, 01:27  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Ничего ты сам не делал, кроме поиска кода во всемирной помойке.
В 1997-98 году, к сведенью, всемирной помойки не было как сейчас. Да и доступ был крайне дорогим, учитывая ту политическую еще тяжелую ситуацию в стране и еще оставшиеся отголоски соц.воспитания не у многих студентов поворачивался язык просить у родителей тысячи на интернет (по 30-45 мин в сутки), когда прожиточный минимум был выше. по этому и сами писали мелкий и простенький софт. вы разве не помните те времена или тогда еще под стол ходили?))
0
0 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 71
10.03.2016, 15:05
Подскажите, как можно через дельфи подсоединится к флешке, на которой нет файлов, а вся информация записана в бинарном коде? И как ее можно извлечь по байтам, а затем их запихнуть в бинарный файл?
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
04.02.2024, 18:24
Здравствуйте.

Как? Успешно ли удалось обратиться к ленточному накопителю?
У меня что-то не выходит. ReadFile возвращает false. Да и CreateFile возвращает валидный хэндлер только если вызывать так.
Delphi
1
CreateFile(pchar('\\.\TAPE0'),GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ  OR FILE_SHARE_WRITE,nil,OPEN_EXISTING,0, 0);
Не пойму, почему ReadFile не работает.
И SetTapePosition работает странно. Выставляет ленту в позицию и сразу отматывает назад.
0
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
19.02.2024, 15:56
Возможно проблема в этих флагах, что если их не не указывать?
Code
1
FILE_SHARE_READ OR FILE_SHARE_WRITE
Добавлено через 2 минуты
Ну и ещё вот, что пишут:
all read and write operations must use buffers that are simple integer multiples of that block size: 512, 1024, 1536, 2048, and so on.
0
0 / 0 / 0
Регистрация: 27.03.2016
Сообщений: 52
20.02.2024, 11:49
А, какие флаги должны тут быть?
Я пробовал читать и по 512 Кб. Это размер блока по умолчанию и меньше и 1 Кб и 2 и 8 и 16. Не получается.
Кто-то проделывал такие эксперименты? Хотелось бы взглянуть на реально работающий кусок кода.
0
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
20.02.2024, 13:24
А, какие флаги должны тут быть?
Можно попробовать указать 0. Это, конечно, вряд ли поможет, но попробовать стоит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2024, 13:24
Помогаю со студенческими работами здесь

IAR stm8s - просьба пнуть в нужном направлении
С STM только начинаю разбираться. Выбран stm8s103k3. Суть проблемы - в дебаггере не работает ни одно периферийное устройство (не...

Пните в нужном направлении многоуровневое приложение БД-сервер-клиет
Подскажите пожалуйста, с чего начать и каким путем идти при создании многоуровнего приложения БД-сервер-клиент, желательно реализация на...

SQL запрос для трех таблиц. Пните в нужном направлении!
Необходимо написать SQL запрос для БД, состоящей из трех таблиц. Структура БД в прикрепленном файле. Запрос: Самое популярное животное у...

Толкните меня в нужном напралении =)
Для получения места в общежитии формируется список студентов, который включает Ф.И.О. студента, группу, средний балл, доход на члена семьи....

Вопрос новичка.......... требуется "волшебный пендель" в нужном направлении.
Народ, хочется начать изучать С++, QT и сопутствующие языки и ИДЕшки. Сколько не пытался читать книги - не получается у меня нифига понять...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru