Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] запись в нетипизированный файл, необходимо сделать архиватор 
:(
    Опции темы
Alx
Дата 24.7.2008, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



Всем привет.
прошу помочь, задолбался уже..
необходимо сделать архиватор, но пока у меня не получилось даже копировальщик сделать..
вот пытаюсь считывая по байту из файла wow.png записывать эти же байты в wow.JAM
вместо этого выскакивает ошибка - File not open. . если добавить после неё assign и rewrite для f2, то работает, но в файл записывается только один символ (т.к.) при каждом проходе цикла файл очищается...
че делать то?..(


--------------------
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 24.7.2008, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

Alx, можно получше описать проблему, и где собственно код?
PM MAIL   Вверх
Alx
Дата 24.7.2008, 02:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



хз 4 утра уже.. я ещё и код забыл приложить..  smile 

Код

program compression;

uses
  crt;
  
const
  path = 'wow.png';
  
procedure error(id:integer;line:integer);
var
  txt:string;
begin
  case id of
    1 : txt := 'Data file not found.';
  end;
  writeln('Error at line ',line,': ',txt);
  readkey;
  halt;
end;

procedure compress1(filename:string);
var
  f1:file;
  f2:file;
  dot:integer;
  chr:char;
  tmp:string;
  newname:string;
  len:integer;
  i:integer;
begin
  assign(f1,filename);
  {$I-}
  reset(f1);
  {$I+}
  if not(IOResult = 0) then
  begin
    error(1,0);
  end;
  len := FileSize(f1);
  newname := filename;
  dot := pos('.',newname);
  delete(newname,dot,length(newname)-dot+1);
  insert('.JAM',newname,dot);
  assign(f2,newname);
  rewrite(f2,1); 

  while FilePos(f1) < len do
  begin
    BlockRead(f1,chr,1);
    blockwrite(f2,chr,1);
  end;

end;
                   
var
  filename:string;
  chr:char;

begin
  clrscr;
  filename := path;
  writeln('Starting lite compression...');
  compress1(filename);
  writeln;
  writeln('Lite compression done.');
  readkey;
  exit;
end.


Добавлено через 2 минуты и 35 секунд
вот. мне надо переписать из файла wow.png содержимое в wow.jam
на 51 строке в этом отрезке происходит ошибка file not found:


Код

 assign(f1,filename);
  {$I-}
  reset(f1);
  {$I+}
  if not(IOResult = 0) then
  begin
    error(1,0);
  end;
  len := FileSize(f1);
  newname := filename;
  dot := pos('.',newname);
  delete(newname,dot,length(newname)-dot+1);
  insert('.JAM',newname,dot);
  assign(f2,newname);
  rewrite(f2,1); 
  while FilePos(f1) < len do
  begin
    BlockRead(f1,chr,1);
    blockwrite(f2,chr,1);
  end;


Добавлено через 3 минуты и 26 секунд
:(( пойду вешацо


--------------------
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 24.7.2008, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



1) reset(f1); здесь надо указать размер записи reset(f1, 1);
2) для копирования используй примерно такую структуру
Код

var

Vf1, Vf2 : file;
NRead, NWrite: Integer;
Buf: array[1..1024] of Char;

begin

AssignFile(Vf1, 'read.txt');
Reset(Vf1, 1);  {Устан-ет размер записи входного файла =1}
AssignFile(Vf2, 'write.txt');
Rewrite(Vf2, 1);  {Устан-ет размер записи выходного файла =1}
repeat
   BlockRead(Vf1, Buf, SizeOf(Buf), NRead);    {читает данные}
   BlockWrite(Vf2, Buf, NRead, NWrite);    {записывает данные}
until (NRead = 0) or (NWrite <> NRead);
CloseFile(Vf1);
CloseFile(Vf2);

end;

ps не совсем понятно, причем здесь архивирование, ну да ладно =) 
PM MAIL   Вверх
Alx
Дата 24.7.2008, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



Цитата(VICTAR @  24.7.2008,  03:16 Найти цитируемый пост)
1) reset(f1); здесь надо указать размер записи reset(f1, 1);

шит, точно.. + !
спасибо большое! smile


--------------------
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 24.7.2008, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



На здоровье  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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