Эт в Nix'ах /dev/fd0 — есть флопик который можно прочитать как файл (если права есть), а тут уж звыняйте вам в сторону asm и 13h здесь
Хотя может я и не прав
Здравствуйте, vitz, Вы писали:
V>Здравствуйте, DioNNis, Вы писали:
V>Эт в Nix'ах /dev/fd0 — есть флопик который можно прочитать как файл (если права есть), а тут уж звыняйте вам в сторону asm и 13h V>здесь V>Хотя может я и не прав
=)))
нет на асме и на C++ я реализовал, меня интересует возможности NET
Если кому интересно:
int WriteSector(char sector, char cylinder, const char *p_buffer)
{
char headnum=0;
char drivenum=0; // always 0 (A:)
asm{
mov ah, 03h // write disk sectors from memory
mov al, 01h // number of sectors to read/write (must be nonzero)
mov ch, cylinder // cylinder number (0..79).
mov cl, sector // sector number (1..18).
mov dh, headnum // head number (0..1).
mov dl, drivenum // drive number (0..3 , for the emulator it depends on quantity of FLOPPY_ files).
mov bx, p_buffer // ES:BX points to data buffer.
int 13h
}
Test();
return 0;
}
Здравствуйте, vitz, Вы писали:
V>Здравствуйте, DioNNis, Вы писали:
V>Ну если реализовал, то чего спрашивашь V>Берешь свою функцию на C++ кладешь (ну или ложишь в dll) и через PInvoke тянешь в .NET V>А по другому никак.
Здравствуйте, DioNNis, Вы писали:
DNN>Ну не ужели нельзя сделать на чистом C#?
А что такое по вашему?
на чистом C#?
Вы еще драйвера попробуйте на нем писать.
Практически весь Windows.Forms — это PInvoke обертка на WinAPI и ничего, пользуются и никто на нечистоту не жалуется
Здравствуйте, vitz, Вы писали:
V>Здравствуйте, DioNNis, Вы писали:
DNN>>Ну не ужели нельзя сделать на чистом C#? V>А что такое по вашему? V>
V>на чистом C#?
V>Вы еще драйвера попробуйте на нем писать. V>Практически весь Windows.Forms — это PInvoke обертка на WinAPI и ничего, пользуются и никто на нечистоту не жалуется
Ну драйвер не драйвер. А оспользовнаие Seek и Read я думаю не относится к области системного программировнаия. И очень жаль, что так обстаят дела в этой области... =(
Здравствуйте, DioNNis, Вы писали:
DNN>Пытаюсь открыть дискету вот таким способом:
<skipped>
DNN>Выдает ошибку, что дискета не доступна. DNN>Если, что пожскажите пожалуйста другой способ, что бы писать данные в отдельные сектора на дискете.
А MSDN почитать религия не позволяет? Ну никак, да?
The .NET Framework does not support direct access to physical disks through paths that are device names, such as "\\.\PHYSICALDRIVE0 ".
Здравствуйте, DioNNis, Вы писали:
DNN>Ну драйвер не драйвер. А оспользовнаие Seek и Read я думаю не относится к области системного программировнаия. И очень жаль, что так обстаят дела в этой области... =(
Дела обстоят отлично, просто .NET создавался не для програмирования низкоуровневого доступа к диску.
Вы же не пытаетесь пилой гвозди забивать, ну или на asm XmlDOM программить(утрировано конеша но че поделаешь)?
насколько я знаю, FileStream не поддерживает открытие устройств (т.е. всего что начинается с символов \\.\ ), если мне не изменяет память при попытке открыть такое устройство вываливается исключение в котором ясно сказано что FileStream не умеет открывать устройства
DNN>Если, что пожскажите пожалуйста другой способ, что бы писать данные в отдельные сектора на дискете.
Можно импортировать CreateFile от WinAPI, а полученый из него HANDLE передавать в конструктор FileStream и работать дальше с FileStream как обычно,
можно импортировать и остальные файловые функции WinAPI и работать через них,
можно поискать какуюнить обертку (хотя самому написать 5 минут дела)
Допустим эту функцию ты поместил в fddio.dll (разумеется с экспортом Write2Sector), тогда так:
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("fddio.dll")]
static public extern int Write2Sector(string FileName, int sectorTo, byte[] buffer);
static void Main()
{
byte[] buf = new byte[512];
for(int i=0; i < buf.Length; i++)
buf[i] = (byte)i;
Write2Sector(@"\\.\A:", 0, buf);
}
}
кстати FileName в твоей функции на C не используется и лучше сразу принимать юникодную строку и прямиком ее в CreateFile в неизменном виде отдавать, чтобы не было проблем с языками, код импорта в C# при этом изменять не нужно (при переходе на юникодную строку в C)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Floppy error
От:
Аноним
Дата:
17.01.07 07:53
Оценка:
Вообще то если бы это были seek и read в файле то да, но ты ж хочешь получить доступ к устройству. Нечего прикладным апликухам лазить куда непопадя, так что системное программирование.