Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
Для юнит теста в Rad studio XE4 требуется создать файл со случайными данными. Диск ССД, ОС 2019 сервер.
Когда размер файла достигает 8.25 мег на разделе С или 10 мег на Д, происходят эти ошибки.

type
  TAofExt = array[1..1024] of Extended;

  TestTt = class(TTestCase)
  public
  procedure SetUp; override;
  procedure TearDown; override;
  published
  procedure Test;
  end;

implementation

procedure TestTt.SetUp;
var
  f: File of TAofExt;
  r: Extended;
  ae: TAofExt;
  i,j: integer;
begin
  try
  try
    AssignFile(f, 'D:\myfile.bin'); // или на C:\Users\me\Desktop\
    Rewrite(f);
    for i:=i to 1024*1024 do
    begin
      for j:=1 to 1024 do 
      begin
        r:=Random;
        ae[i]:=r;
      end;
      Write(f, ae); // когда i=1025 сначала Access denied, следом I/O error 103.
    end;
  finally
    Close(f);
  end;
  except
    on E:Exception do
      //
  end;
end;


Почитал про 103 ошибку, что она связана с оппортунистической блокировкой или кэшированием. Так что делать? Ждать и пытаться повторять запись каждые несколько миллисекунд? Сколько раз? 10? 100? 1000? Но она даже не первой выскакивает.
31 май 21, 16:14    [22329409]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
Chungachanga,

for i:=i to 1024*1024 do


i:=i ???

TAofExt = array[1..1024] of Extended;
ae: TAofExt;
а потом еще и 1024*1024.
Это не миллион на 8. Это миллион на 8 тысяч.
т.е. 8.5 гиг. Так и задумано? Место кончилось?
После ошибки в свойствах файла (!) сколько байт пишет?
31 май 21, 16:24    [22329413]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4664
Chungachanga,

попробуй по современному
http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_createfile.htm
http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_writefile.htm
31 май 21, 16:25    [22329414]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
Gerasimenko,

зачем такие мучения. FileStream нельзя что-ли?
31 май 21, 16:25    [22329416]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4664
kdv
Gerasimenko,

зачем такие мучения. FileStream нельзя что-ли?
можно, одно другому не помеха
31 май 21, 16:26    [22329417]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
нет, место не кончилось. а что, кого-то удивляют гигабайты?

да, там не :=i а :=1. все не дети, все поняли. к вопросу отношения не имеет.

Сообщение было отредактировано: 31 май 21, 16:25
31 май 21, 16:32    [22329420]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
Gerasimenko
Chungachanga,

попробуй по современному
http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_createfile.htm
http://vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_writefile.htm


Menage?
Ну ладно. Под современным понимается прямой вызов win API? Может быть мне и разрешат, но врядли. Хотят чтобы было на дельфи.

Сообщение было отредактировано: 31 май 21, 16:31
31 май 21, 16:35    [22329422]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12885
Chungachanga
    for i:=i to 1024*1024 do
    begin
      for j:=1 to 1024 do 
      begin
        r:=Random;
        ae[i]:=r;
      end;
      Write(f, ae); // когда i=1025 сначала Access denied, следом I/O error 103.
    end;
  finally
    Close(f);
  end;
Исправите и будет работать
31 май 21, 16:36    [22329423]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
_Vasilisk_,

нет, не будет. это опечатка перепечатывания с одного компа на другой. там 1. все не дети.
ещё раз: ошибка возвращается файловой системой после успешной записи 8-10 мег. не надо про синтаксис, пожалуйста.

Сообщение было отредактировано: 31 май 21, 16:33
31 май 21, 16:40    [22329426]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

Chungachanga
// когда i=1025 сначала Access denied, следом I/O error 103.

Не здесь, а выше. Когда ты в массив из 1024 элементов пытаешься записать 1025-й.

Posted via ActualForum NNTP Server 1.5

31 май 21, 16:45    [22329428]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
Dimitry Sibiryakov,

покажите, где именно и почему это происходит?
я кажется начинаю догадываться. Вы часом не путаете Access violation с получаемым мной File Access Denied? это I/O exception. разные вещи.

Сообщение было отредактировано: 31 май 21, 16:40
31 май 21, 16:46    [22329430]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

Chungachanga
покажите, где именно и почему это происходит?

Здесь:
ae[i]:=r;

После того, как ты вынес к чёртовой матери то, что лежит в стэке после массива - можешь
ожидать любые чудеса. В данном конкретном случае у тебя переписывается мусором структура f.

Posted via ActualForum NNTP Server 1.5

31 май 21, 16:55    [22329431]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
Dimitry Sibiryakov

Chungachanga
покажите, где именно и почему это происходит?

Здесь:
ae[i]:=r;

После того, как ты вынес к чёртовой матери то, что лежит в стэке после массива - можешь
ожидать любые чудеса. В данном конкретном случае у тебя переписывается мусором структура f.


Простым человеческим языком: вместо j стоит i. Спасибо!
31 май 21, 16:59    [22329434]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

Простым человеческим языком: нубам нельзя отключать в настройках сборки проверку выхода
индекса за пределы массива.

Posted via ActualForum NNTP Server 1.5

31 май 21, 17:03    [22329437]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29815
Chungachanga,

"все не дети."
31 май 21, 19:01    [22329515]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2569
Dimitry Sibiryakov
Простым человеческим языком: нубам нельзя отключать в настройках сборки проверку выхода
индекса за пределы массива.
Скорее: для дебага стоит включать. И не только нубам...
31 май 21, 21:57    [22329582]     Ответить | Цитировать Сообщить модератору
 Re: Access denied за которым следует I/O Error 103  [new]
Chungachanga
Member

Откуда: Габон
Сообщений: 20
Dimitry Sibiryakov

Простым человеческим языком: нубам нельзя отключать в настройках сборки проверку выхода
индекса за пределы массива.


Совершенно забыл что Range Checking по умолчанию отключён. Спасибо ещё раз!
2 июн 21, 18:52    [22330528]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить