Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.10.2014, 12:35
Pavel1988 Pavel1988 вне форума
Прохожий
 
Регистрация: 04.10.2014
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию I/O error 105 File not open for output. Ошибка 105 файл не открыт на вывод. Delphi 7

Есть элементарная программа которая записывает в текстовый файл набор случайных символов. Выдаёт ошибку 105. На строке Write(Tx1, RndChar);

Код:
procedure TForm1.Button1Click(Sender: TObject);

var Tx1: TextFile;
     LogFile: TextFile;
     Report: string;
     RndNumOfChar: Byte;
     RndChar: Char;

begin
Randomize;
AssignFile(Tx1, 'wea_wea.txt');
Reset(Tx1);
AssignFile(LogFile, 'LogFile.txt');
Rewrite(LogFile);

while not Eof(Tx1)
   do
   begin
   RndNumOfChar := 126 + Random(126);
   RndChar := Chr(RndNumOfChar);
   Write(Tx1, RndChar);
   end;

CloseFile(Tx1);
CloseFile(LogFile);
end;
MAD: теги.

Последний раз редактировалось M.A.D.M.A.N., 04.10.2014 в 13:03.
Ответить с цитированием
  #2  
Старый 04.10.2014, 13:04
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Потому что файл открыт на чтение, а не на запись. В ошибке это и написано.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 05.10.2014, 09:16
Pavel1988 Pavel1988 вне форума
Прохожий
 
Регистрация: 04.10.2014
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию 2

чем можно заменить строку Reset(Tx1); чтобы файл был открыт на запись в него. Append не подходит поскольку записывает всё в конец файла, Rewrite тоже поскольку уничтожает файл переданный ему в параметрах?
Ответить с цитированием
  #4  
Старый 05.10.2014, 09:33
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

CreateFile с OPEN_ALWAYS
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 05.10.2014, 11:33
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Если я правильно понял задумку, то имелось в виду переписать все байты, не меняя размера. Тогда можно сначала получить размер файла, потом rewrite и писать циклом нужное количество байт.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 05.10.2014, 17:19
Pavel1988 Pavel1988 вне форума
Прохожий
 
Регистрация: 04.10.2014
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию 3

Rewrite сначала уничтожает файл если такой имеется на диске, а потом создает файл с таким же именем, но пустой. Это не подходит.
CreateFile создаёт новый файл, а нужно переписывать уже существующий.

Последний раз редактировалось Pavel1988, 05.10.2014 в 17:21.
Ответить с цитированием
  #7  
Старый 05.10.2014, 17:56
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Rewrite сначала уничтожает файл если такой имеется на диске, а потом создает файл с таким же именем, но пустой. Это не подходит.
Я ж написал. Сначала получить размер, потом стереть файл и создать новый через rewrite, заполнив нужными данными (ведь от оригинального файла, очевидно, в коде только размер используется).
Цитата:
CreateFile создаёт новый файл, а нужно переписывать уже существующий.
Внимательней читай доки. К CreateFile сводятся почти все существующие в природе открытия файлов (и не только файлов). Различие только в передаваемых флагах и последующей обработке (или ее отсутствии). Numlock указал нужный флаг.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 06.10.2014, 23:04
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я вот только не понял, а на кой в этом коде LogFile?
Ну а если хочется изменять данные имеющегося файла, то можно так сделать:
Код:
Var
  CharFile: File of Char;
  Ch: Char;
  i: Integer;
begin
 AssignFile(CharFile, 'wea_wea.txt');
 Reset(CharFile);
 for i := 0 to FileSize(CharFile) - 1
 do begin
    Seek(CharFile, i);
    Ch := Chr(126 + Random(126));
    Write(CharFile, Ch);
    end;
 CloseFile(CharFile);
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter