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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2009, 11:20   #21
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Не стоит забывать о зависимости скорости работы с файлами (да и не только с файлами) от аппаратного обеспечения. Программные ухищрения, оптимизация сводятся на нет при недостаточной конфигурации компьютера - низкое быстродействие, недостаток памяти.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 06.08.2009, 14:56   #22
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Я вот плохо в файлах пока понимаю,
как мне реализовать такую функцию которой можно добавлять в файл данные а не перезаписывать может кто знает как это реализовать?

вот посмотрите что я не могу сделать до путя
короче Editor Pack косячиный иза моего не домысла
юзайте readme!!! в нутри.
Error_pack_editor.rar

Последний раз редактировалось Stilet; 06.08.2009 в 15:38.
VintProg вне форума Ответить с цитированием
Старый 06.08.2009, 15:10   #23
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Имеются специальные функции, позволяющие смещать указатель в файле. Когда вы открываете файл (это относится и к потокам), имеется возможность устанавливать текущее положение от которого производится чтение/запись.

Цитата:
Процедура SEEK.
Смещает указатель файла к требуемому компоненту. Формат обращения:
SEEK (<ф.п.>,<N компонента>)
Здесь <N компонента> - выражение типа LONGINT, указывающее номер компонента файла.
Первый компонент файла имеет номер 0.
Содрал с самоучителя по ТурбоПаскалю.

То есть открыли файл для записи. Сместили указатель в конец и пишем, пишем, пишем...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 06.08.2009 в 16:03.
Utkin вне форума Ответить с цитированием
Старый 06.08.2009, 17:06   #24
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Да это я знаю я хотел вот так к примеру вот данные в файле:
0123456789

я хочу добавить вот эти данные %%%% на 3 позицию
чтобы получилось вот так

01%%%%3456789

как такую функцию написать?

Просто не могу как это сделать для моего формата:
в начали идете заголовок:

Код:
type
 TPacHeader = packed record
   PacName : array[0..2] of char; //Зоголовок
   InfoSizeName : integ; //Размер содержымой инфы
 end;
PacName сдесь сегда должен быть 'PAC' в файле
InfoSizeName - размер инфы файлов

сама инфа:
Код:
type
 TPacInfo = packed record   //34 - байта
  Name : array[0..25] of char; //Имя файла может быть до 26 символов
  OffSet : integer; //Смещение файла то и есть позиция
  Size : integer;   //Размер файла максимальный размер может быть до 4Гб
 end;

когда надо добавить новый файл в pac
надо добавить инфу и сам файл,
в тех модулях что я выложил там когда добовляеш в pac новый файл
инфа затирает первый файл в pac в результате первый файл не пашет,
как решить эту задачу какими функциями пользоваться?

Последний раз редактировалось Stilet; 10.08.2009 в 08:19.
VintProg вне форума Ответить с цитированием
Старый 07.08.2009, 07:00   #25
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Если инфы мало - считайте файл в массив, исправьте там, все как Вам нравиться и перепишите файл новыми значениями. Изначально речь вроде шла о вставке данных в конец файла...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.08.2009, 10:13   #26
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Лутчии функции для работы с файлами это в Kernel32.dll я так понял.
VintProg вне форума Ответить с цитированием
Старый 08.08.2009, 16:28   #27
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Цитата:
VintProg
Вот вам примеры функций для работы с файлами(насколько я понял вы пытаетесь манипулировать с packed record)

Код:
unit RecordBase;

interface

 uses
  classes,  sysutils;


  Type

    TelBase = packed record
    Name : String[20];
    Street : String[30];
    BdNumber : String[5];
    KvNumber : String[4];
    telNumber : String[7];

  end;

     TRecordStream = class(TFileStream)
      private
       function GetNumRecs : Longint;
       function GetCurRec  : Longint;
       procedure SetCurRec(RecNo : Longint);
      protected
       function GetRecSize : Longint; Virtual;
      public
       function SeekRec(RecNo : Longint; Origin : Word): Longint;
       function WriteRec(const Rec): Longint;
       function AppendRec(const Rec): Longint;
       function ReadRec(var Rec): Longint;
       procedure First;
       procedure Last;
       procedure NextRec;
       procedure PreviousRec;
       property NumRecs : Longint read GetNumRecs;
       property CurRec : Longint read GetCurRec write SetCurRec;
       end;



implementation

{ TRecordStream }

function TRecordStream.AppendRec(const Rec): Longint;
begin
Seek(0, 2);
Result := Write(Rec, GetRecSize);
end;

procedure TRecordStream.First;
begin
Seek(0, 0);
end;

function TRecordStream.GetCurRec: Longint;
begin
Result := (Position div GetRecSize) + 1;
end;

function TRecordStream.GetNumRecs: Longint;
begin
Result := Size div GetRecSize;
end;

function TRecordStream.GetRecSize: Longint;
begin
Result := SizeOf(TelBase);
end;

procedure TRecordStream.Last;
begin
Seek(0, 2);
Seek(- GetRecSize, 1);
end;

procedure TRecordStream.NextRec;
begin
if ((Position + GetRecSize) div GetRecSize) = GetNumRecs then
 raise Exception.Create('Cannon read beyond end of file')
  else
   Seek(GetRecSize, 1);
end;

procedure TRecordStream.PreviousRec;
begin
if (Position - GetRecSize >= 0) then
 Seek(- GetRecSize, 1)
  else
   raise Exception.Create('Cannon read beyond beginning of the file');
end;

function TRecordStream.ReadRec(var Rec): Longint;
begin
Result := Read(Rec, GetRecSize);
Seek(- GetRecSize, 1);
end;

function TRecordStream.SeekRec(RecNo: Integer; Origin: Word): Longint;
begin
Result := Seek(RecNo * GetRecSize, Origin);
end;

procedure TRecordStream.SetCurRec(RecNo: Integer);
begin
if RecNo > 0 then
 Position := (RecNo - 1) * GetRecSize
else
Raise Exception.Create('Cannot go beyond beginning of file.');
end;

function TRecordStream.WriteRec(const Rec): Longint;
begin
Result := Write(Rec, GetRecSize);
end;

end.
З.Ы. Когда-то в детсве я делал телефонный справочник и нашол в какой-то книге этот шаблон
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 09.08.2009, 06:31   #28
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

А у меня такой вопрос как удалить в файле 4 - байта,
допустим в файл весил 10 байт после удаления стал весить 6 байт?
VintProg вне форума Ответить с цитированием
Старый 09.08.2009, 12:11   #29
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Код:
Truncate
Процедура Truncate обрезает файла в текущей позиции. Все данные после текущей позиции стираются.
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 09.08.2009, 12:52   #30
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

А добавить допустим 4 - байта есть такая функция?
VintProg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для работы с файлами (паскаль). DeamoniC Помощь студентам 4 09.06.2009 23:21
Посоветуйте прогу для работы с реестром Денис Коржанов Софт 4 28.01.2009 11:17
Программа для работы с dfx-файлами Sanek777 Фриланс 5 11.11.2008 21:04
Библиотека для работы с *.psd-файлами. vinni Мультимедиа в Delphi 3 23.10.2008 20:29
Прога для работы с текстовыми файлами f-only Софт 4 04.10.2007 23:35