Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в файл, Запись в файл 
:(
    Опции темы
lordgabriel
  Дата 28.6.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Мне нужно чтобы програ читала файл внесла измения и сохранила результаты в этот же файл .
У меня почемуто не получается сохраняется пустой файл
вот код:
Код


 AssignFile(f1,edit1.text);
 Rewrite(f1) ;
  While Not Eof(f1) do
  begin
    Read(f1, b);
    n := n + 1;
    if n = C then n := 0;
    b := b Xor key[n];
    Write(f1, b);
  end;
  CloseFile(f1);

PM MAIL   Вверх
ama_kid
Дата 28.6.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 9
Всего: 95



Для пустого файла (а файл, открытый ReWrite'ом - всегда будет пустой) функция Eof возвращает true, поэтому цикл не выполняется. Если в файле есть данные - то его надо открывать с помощью функции Reset.
Кстати, при выполнении Read указатель файла смещается, так что для того, чтобы записать символ на то же место, откуда он был считан - надо перед чтением запоминать позицию файла, а после чтения - восстнавливать...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
lordgabriel
Дата 28.6.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



не понял как это сделать 
PM MAIL   Вверх
VanHelsing
Дата 28.6.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ХОЧУ ВСЕ ЗНАТЬ!!!
**
Награды: 1



Профиль
Группа: Участник
Сообщений: 288
Регистрация: 3.1.2008
Где: Екатеринбург

Репутация: нет
Всего: 6



Код

AssignFile(f1,edit1.text);
 Reset(f1) ;
  While Not Eof(f1) do
  begin
    Read(f1, b);
    n := n + 1;
    if n = C then n := 0;
    b := b Xor key[n];
    Write(f1, b);
  end;
  CloseFile(f1);

Процедура Reset открывает файл указанный в FileHandle для чтения, записи или чтения и записи. 


--------------------
PM MAIL   Вверх
ivan219
Дата 28.6.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 5
Всего: 12



lordgabriel, используй TStringList

Код

var
 S: TStringList;
begin
 S := TStringList.Create;
 S.LoadFromFile('NameFile');
 //S.....
 S.SaveToFile('NameFile');
 S.Free;
end;


Это сообщение отредактировал(а) ivan219 - 28.6.2008, 20:17
PM MAIL ICQ   Вверх
THandle
Дата 29.6.2008, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Цитата(ivan219 @  28.6.2008,  21:15 Найти цитируемый пост)
lordgabriel, используй TStringList



Не плохо тогда тут еще добавить try..fianlly. На всякий случай...

Код

var
  S : TStringList;
begin
  S := TStringList.Create;
  try
    S.LoadFromFile('NameFile');
    //S.....
    S.SaveToFile('NameFile');
  finally
    S.Free;
  end;
end;

PM   Вверх
Beltar
Дата 1.7.2008, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



Цитата

не понял как это сделать


Как получить позицию не скажу, т. к. не помню, но Help помнит. ;) Переместиться по-моему Seek.

Цитата

используй TStringList


Судя по Read(f1, b); у него может быть и бинарный файл и key явно бинарный иначе Key[0] будет не смешно.

ИМХО проще считать весь файл в байтовый массив, поксорить и переписать. Потоки вообще-то рулят.

Это сообщение отредактировал(а) Beltar - 1.7.2008, 07:27

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  XOREncodingUnit.pas 1,15 Kb


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
m007kuzya
Дата 27.4.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.4.2009

Репутация: нет
Всего: нет



Цитата(VanHelsing @ 28.6.2008,  14:47)
Код

AssignFile(f1,edit1.text);
 Reset(f1) ;
  While Not Eof(f1) do
  begin
    Read(f1, b);
    n := n + 1;
    if n = C then n := 0;
    b := b Xor key[n];
    Write(f1, b);
  end;
  CloseFile(f1);

Процедура Reset открывает файл указанный в FileHandle для чтения, записи или чтения и записи.

Может меня конечно сильно глючит. Но у меня Reset открывает файл только для чтения. По крайней мере вот такой код:
Код

procedure TForm1.Button3Click(Sender: TObject);
  var f1:textfile;
    n:integer;
begin
  assignfile(f1,'d:\1.txt');
  reset(f1);
  n:=0;
  while not eof(f1) do
    begin
      readln(f1);
      n:=n+1;
      if n=3 then
        writeln(f1,'ы');
    end;
end;

выдаёт ошибку 'I/O error 105'.

Так в Дельфи есть возможность открыть файл одновременно и для чтения, и для записи? Или для того чтобы вставить строчку в середину файла надо использовать всякого рода костыли, типа TStringList или временного, буферного, файла?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.