ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[Delphi] скопировать кусок нужной длины из указанного места в файле в другой файл
  #1  
Старый 26.05.2009, 15:17
Аватар для Jim_Di
Jim_Di
Познающий
Регистрация: 20.11.2008
Сообщений: 32
Провел на форуме:
104649

Репутация: 39
По умолчанию [Delphi] скопировать кусок нужной длины из указанного места в файле в другой файл

надо скопировать с указанного места кусок нужной длины и сохранить в файл, как сделать? у меня уже моск кипит. собсно сами данные и их размер (RIFF WAVE) я нашёл, теперь проблема в том, чтобы сохранить

Код:
var
   FHandle, FSave, SizeFile, BytesRW, RW: Cardinal;
   l: Longint;
   oldstring: string;
   SIZE: DWORD;
   wavsize:integer;
   n: integer;
 begin
   FHandle := FileOpen('c:\1.bin', FmOpenRead);
   OldString := 'RIFF';
   n:=1;
   SizeFile := GetFileSize(FHandle, nil);
   for l := 0 to SizeFile - Length(oldstring) do
   begin
     FileSeek(FHandle, l, 0);
     FileRead(FHandle, oldstring[1], 4);
     if oldstring = 'RIFF' then
     begin
       FileSeek(FHandle, l + 4, 0);
       Memo1.Lines.Add(IntToStr(l));
       FileRead(FHandle, SIZE, 4);
       Memo1.Lines.Add(IntToStr(SIZE));
       FileSeek(FHandle, l , 0);

//тут сильно лажовый код =)
       FileRead(FHandle,BytesRW,size);

    FSave := CreateFile(pchar('_out'+Int2Digs(N, 4)+'.bmp'), GENERIC_WRITE,
0, nil, CREATE_ALWAYS, 0, 0);
    WriteFile(FSave, BytesRW, SizeOf(BytesRW), RW, nil);
    CloseHandle(FSave);
//вот

      n:=n+1;

     end;
     Application.ProcessMessages;
   end;
   CloseHandle(FHandle);
end;

Последний раз редактировалось Jim_Di; 26.05.2009 в 15:24..
 
Ответить с цитированием

  #2  
Старый 31.05.2009, 18:39
Аватар для intNet
intNet
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме:
1271980

Репутация: 19
По умолчанию

Цитата:
надо скопировать с указанного места кусок нужной длины и сохранить в файл
Вот :
Код:
procedure _copy(FileNameIn: string ;// путь к входному файлу
 const FileNameOut: string;         // путь к выходному файлу
  place,   // позиция, откуда начать копировать
    tocopy: integer); // сколько символов копировать
var
  fin, fout: System.Text;
  _in, _out: string;
  s: string;
begin
  If not FileExists(FileNameIn) then
    exit;
  AssignFile(fin, FileNameIn);
  reset(fin);
  AssignFile(fout, FileNameOut);
  rewrite(fout);
  _in:='';
  _out:='';
  while not EOF(fin) do begin
    readln(fin, _in);
    _out:=_out+_in;
  end;
  s:=copy(_out, place, tocopy);
  writeln(fout, s);
  CloseFile(fin);
  CloseFile(fout);
end;
П.С. не самый шустрый алгоритм, писал "на коленке", но должно работать.
 
Ответить с цитированием

  #3  
Старый 31.05.2009, 18:52
Аватар для Jim_Di
Jim_Di
Познающий
Регистрация: 20.11.2008
Сообщений: 32
Провел на форуме:
104649

Репутация: 39
По умолчанию

Спасибо за совет, думаю тое пригодиься кусок, гораздо проще и удобнее оказалось сделать TFileStream, там и придумывать ничего не надо - всё необходимое есть.
 
Ответить с цитированием

  #4  
Старый 01.06.2009, 00:33
Аватар для slesh
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

А вообще тут всё проще делается на API и выйдет примерно так
f1=CreateFile на чтение
f2=CreateFile на запись
SetFilePointer для f1 на нужную тебе позицию
GetMem чтобы выделить память под буфер размером чтобы вместились твои данные
ReadFile f1
WriteFile f2
CloseHandle f1
CloseHandle f2
FreeMem
 
Ответить с цитированием

  #5  
Старый 01.06.2009, 07:30
Аватар для Jim_Di
Jim_Di
Познающий
Регистрация: 20.11.2008
Сообщений: 32
Провел на форуме:
104649

Репутация: 39
По умолчанию

вот за апи спасибо, попробую и так.

в принципе сейчас код работает нормально, парюсь с ускорением алгоритма поиска набора байт в файле
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МикроДжоинер для начинающих ReanimatoR Статьи 23 02.01.2010 15:07



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ