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

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

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

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

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

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

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

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

20
пофигист широкого профиля
4757 / 3194 / 860
Регистрация: 15.07.2013
Сообщений: 18,491
21.06.2014, 02:31 2
Цитата Сообщение от Abraxass Посмотреть сообщение
как вообще в делфи организуется доступ к накопителям не имеющими явного буквенного обозначения? (стриммеры ранних поколений не видно в Мой компьютер, они видны только через спец. бекап софт)
Никак. Это вопрос не по Дельфи.
Цитата Сообщение от Abraxass Посмотреть сообщение
куда я еще могу написать, где читают профи?
В форум по железу есс-но.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
21.06.2014, 03:45  [ТС] 3
разбежался "никак" чтоли? я на своей памяти делал софт на уровне биос через ядро винды, не пукайте в лужу. вопрос актуален
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
21.06.2014, 10:05 4
Ленточный накопитель? Это касеты и записывающие ленты чтоли? Такие устройства можно встретить только в музее. Вышли из употребления, так как скорость чтения/записи информации на них была во много раз(порядка 1000-2000) меньше скорости записи на стандартные флеш- карты или HDD. Если есть устройство для подключения этого ленточного накопителя к компьютеру и драйвер для этого накопителя, то система позволит нам делать все операции с этим устройством.
Кажись, для подключения к такому устройству надо реализовывать технологии Com-портов и подобные им.
0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
21.06.2014, 17:48  [ТС] 5
Цитата Сообщение от саша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 6
Цитата Сообщение от Abraxass Посмотреть сообщение
как вообще в делфи организуется доступ к накопителям не имеющими явного буквенного обозначения?
через файловые дескрипторы (CreateFile, ReadFile, WriteFile или расширенные функции (Ex) - если асинхронные вызовы)
по поводу получения символьного имени для открытия файла (CreateFile) - как вариант
SetupDiGetClassDevs function

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 20.06.2014
Сообщений: 11
21.06.2014, 19:04  [ТС] 8
Цитата Сообщение от 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 9
Цитата Сообщение от 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  [ТС] 10
Цитата Сообщение от 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 11
ничего не мешает описать требуемые структуры и константы:
сама структура, от родителя: TAPE_GET_MEDIA_PARAMETERS structure

Все украдено до нас (с):
Delphi and Tape Device - если класс не работает, то по крайней мере там описаны требуемые константы и структуры
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
22.06.2014, 21:38 12
Цитата Сообщение от 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  [ТС] 13
Цитата Сообщение от cotseec Посмотреть сообщение
ничего не мешает описать требуемые структуры и константы:
В общем все причесал, юнит utapeapi по частям собрал. Сейчас при компиле спотыкается только о константу TAPE_LOAD. Тут нашел какие-то значения http://msdn.microsoft.com/en-u... s.85).aspx. 0L - это что? стринг?)

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

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

Как? Успешно ли удалось обратиться к ленточному накопителю?
У меня что-то не выходит. 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
4175 / 1825 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
19.02.2024, 15:56 18
Возможно проблема в этих флагах, что если их не не указывать?
Код
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 19
А, какие флаги должны тут быть?
Я пробовал читать и по 512 Кб. Это размер блока по умолчанию и меньше и 1 Кб и 2 и 8 и 16. Не получается.
Кто-то проделывал такие эксперименты? Хотелось бы взглянуть на реально работающий кусок кода.
0
4175 / 1825 / 218
Регистрация: 06.10.2010
Сообщений: 4,111
20.02.2024, 13:24 20
А, какие флаги должны тут быть?
Можно попробовать указать 0. Это, конечно, вряд ли поможет, но попробовать стоит.
0
20.02.2024, 13:24
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2024, 13:24
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Преобразование полей (элементов управления содержимым) в обычный текст
РоΜа 23.01.2025
Возникла необходимость преобразовать поля в текст (те, что на вкладке разработчик добавляются) . Помучившись родил следующее: Sub ПоляВТекст() Преобразует все поля в текст (даты, текст,. . .
Как проверить существование директории в скрипте Bash
bt_guru 23.01.2025
При разработке скриптов Bash одной из ключевых задач является корректная работа с файловой системой, где особое место занимает проверка существования директорий. Эта операция становится критически. . .
Как работают срезы (slice) в Python
bytestream 23.01.2025
Python предоставляет разработчикам мощный и гибкий инструмент для работы с последовательностями данных - срезы (slices). Эта функциональность позволяет извлекать, модифицировать и управлять. . .
Как удалить подмодуль (submodule) в Git
bytestream 23.01.2025
При работе с крупными проектами в системе контроля версий Git разработчики часто сталкиваются с необходимостью управления зависимостями и внешними компонентами. Подмодули (submodules) представляют. . .
В чем разница между @staticmethod и @classmethod в Python. Декораторы методов
bytestream 23.01.2025
В Python декораторы методов представляют собой мощный инструмент, позволяющий модифицировать поведение функций и методов без изменения их исходного кода. Эта возможность является одной из. . .
Как преобразовать InputStream в String в Java
bytestream 23.01.2025
В мире Java-разработки работа с потоками данных является одной из ключевых операций при создании современных приложений. InputStream, как фундаментальный класс для обработки входных потоков данных,. . .
Как обновить форк (ответвление) репозитория в Git
bytestream 23.01.2025
Одним из наиболее мощных инструментов Git для организации совместной работы является механизм форкинга репозиториев, который позволяет создавать независимые копии проектов для дальнейшей разработки. . . .
Как работает async/await в C#. Асинхронное программировани­е в .NET
bytestream 23.01.2025
Введение в асинхронное программирование Асинхронное программирование представляет собой важнейшую концепцию современной разработки программного обеспечения, особенно в контексте создания. . .
КуМир: полное руководство
bytestream 23.01.2025
Введение в КуМир: история создания и назначение КуМир (Комплект Учебных МИров) представляет собой образовательную среду программирования, которая была создана для обучения основам алгоритмизации и. . .
Что такое OLAP. Где и как использовать многомерный анализ данных
bytestream 23.01.2025
Введение в OLAP-технологии В современном мире бизнес-аналитика и обработка больших массивов данных играют ключевую роль в принятии стратегических решений. Организации накапливают огромные объемы. . .
MongoDB: что это, для чего нужна и как использовать
bytestream 23.01.2025
Введение в MongoDB: современная документоориентированная СУБД В современном мире разработки программного обеспечения выбор правильной системы управления базами данных является критически важным. . .
Как использовать закрытый ключ шифрования в Git. Шифрование в Git
bytestream 23.01.2025
Установка и настройка закрытых ключей в Git предоставляет дополнительный уровень безопасности для работы с репозиториями. Для начала необходимо создать пару ключей, обычно это осуществляется с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru