Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2010, 13:53   #1
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию ошибка "I/O 998 Error"

При чтениы любого файла постоянно выдает "I/O 998 Error"

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  f1{,f2}:file;
  buf1{,buf2}:array of char;
  x1{,x2}:longint;
begin
assignfile (f1,'c:\lol.exe');
filemode:=0;
reset(f1,1);
x1:=filesize(f1);
setlength(buf1,x1);
blockread(f1,buf1,x1); // ошибка "I/O 998 Error"
....
closefile(f1);
end;
legendary вне форума Ответить с цитированием
Старый 31.08.2010, 01:22   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Поставь {$I-}
Ну или хотя бы пиши BlockRead(f1,buf1[0],x1). Не забывай, что динамический массив это все-таки указатель. Кстати, тут еще один момент. Размер чара не всегда равен одному байту. В Д2010, например, он уже 2 байта. В данном случае это не критично, но перерасход памяти обеспечен.

Последний раз редактировалось Баламут; 31.08.2010 в 01:55.
Баламут вне форума Ответить с цитированием
Старый 31.08.2010, 13:43   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Из гугла забанили? I/O 988 - это ERROR_NOACCESS.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.08.2010, 14:26   #4
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Из гугла забанили? I/O 988 - это ERROR_NOACCESS.
сильно умный? раз не знаеш ответа то и рот прыкрой. что NOACCESS и без тебя знаю. ти скажы почему для всех файлов NOACCESS?
legendary вне форума Ответить с цитированием
Старый 31.08.2010, 14:26   #5
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Из гугла забанили? I/O 988 - это ERROR_NOACCESS.
Надеюсь это не в мой огород камень? Я ведь искренне пытался указать на разницу между переданным в ф-ию buf1 и необходимым buf1[0]. Очевидно, что ошибка доступа здесь

Последний раз редактировалось Баламут; 31.08.2010 в 14:30.
Баламут вне форума Ответить с цитированием
Старый 31.08.2010, 14:29   #6
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию

Цитата:
Сообщение от Баламут Посмотреть сообщение
Поставь {$I-}
ну поставлю и чо? прога не вылетыт но и не прочтет блок

Цитата:
Сообщение от Баламут Посмотреть сообщение
buf1[0]. Очевидно, что ошибка доступа здесь
до нормальных претензый не имею, но не понял почему buf1[0]?

Последний раз редактировалось Stilet; 31.08.2010 в 14:43.
legendary вне форума Ответить с цитированием
Старый 31.08.2010, 14:38   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от legendary Посмотреть сообщение
ти скажы почему для всех файлов NOACCESS?
Есть тысяча и одна причина.

exe-файл запущен? Vista и выше и файл в Program Files или аналогичной папке? read-only атрибут? и т.д.

Про FileMode или TFileStream раньше не слышали?

P.S. Между прочим, это всё указано в ссылках гугла.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 31.08.2010, 14:42   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но не понял почему buf1[0]
Потому что для нетипированных параметров стоит указывать их начало.
Buf - это переменка, содержащая указатель на массив, а тебе нужно передать не указатель на массив а адрес на начало массива.
Фактически blockread считает что по адресу, где расположена buf находится массив, в то время как там всего лишь находится адрес на массив, потому и ошибка.

Если бы ты писал так:
Код:
buf1{,buf2}:array[1..111] of char;
То buf бы указывал на начало массива а не на указатель на начало массива.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 14:48   #9
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Цитата:
Сообщение от legendary Посмотреть сообщение
но не понял почему buf1[0]?
Потому, что динамический массив есть по сути своей указатель. Ф-ия BlockRead нуждается в адресе начала блока памяти, в который она сможет писать данные. Адрес этот и есть buf1[0]. Если же мы будем писать по адресу buf1, то быстренько попадем в область, писать в которую низя! Отсюда и NOACCESS. В общем почитай про указатели. С моим корявым стилем изложения нужно подальше от педагогики держаться

ЗЫ. И куда я лезу? Стилет же на форуме... За ним разве успеешь?..
Баламут вне форума Ответить с цитированием
Старый 31.08.2010, 14:49   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Гы, спросонья мне показалось, что ошибка вылетает на другой строке.

Тогда, да, проблема в том, что buf1 - это не данные массива. Данные массива - это buf1[0].

Цитата:
Сообщение от legendary Посмотреть сообщение
но не понял почему buf1[0]?
Вникать.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка "Asynchronous socket error 10053" Neexuus Работа с сетью в Delphi 4 30.11.2010 14:02
strcpy(str, strlen(""), "") - error! nazavrik Общие вопросы C/C++ 2 09.02.2010 17:21
1>Проект : error PRJ0003 : Ошибка при создании "cl.exe". ben95 Помощь студентам 1 14.05.2009 17:10
Проект : error PRJ0003 : Ошибка при создании "cl.exe". ben95 Общие вопросы C/C++ 0 14.05.2009 16:50
ОШИБКА:"error BGI graphics not ..." Panterka Помощь студентам 7 12.12.2007 17:06