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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 20:59   #1
AET
Пользователь
 
Регистрация: 29.02.2008
Сообщений: 60
По умолчанию работа с файлом

надо считать кусок файла с какого места это понятно вот как указать до кокого места его считывать
AET вне форума Ответить с цитированием
Старый 30.06.2011, 21:09   #2
NervniiJ
Похмел
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 16
По умолчанию

Обычно указывают не "до кокого места", а "сколько".
Обьясни "популярнее" вопрос свой.
NervniiJ вне форума Ответить с цитированием
Старый 30.06.2011, 21:19   #3
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Создаешь буфер с нужным размером и в него открываешь файл

Пример

Код:
var
 f : File;
 I: integer;
Buffer: pointer;
begin
  {$I-}
   AssignFile(f, FileName);
   FileMode := fmOpenReadWrite;
   Reset (f, 1);
   {$I+}
   i:=IOResult;
  if i>0 then exit;
GetMem(Buffer, 32);
 seek(f, iSeek);
  BlockRead(f, Buffer^, Size);
 CloseFile(f);
затем разбираем данные буфера

Каким методом вы файл открываете и какой текстовый или бинарный?

Последний раз редактировалось Aliens_wolfs; 30.06.2011 в 21:24.
Aliens_wolfs вне форума Ответить с цитированием
Старый 30.06.2011, 21:20   #4
AET
Пользователь
 
Регистрация: 29.02.2008
Сообщений: 60
По умолчанию

вобшем считываю несколько файлов и в каждом файле разные место считывания и разные размеры считывания выбор и адрес считывания задаю через ComoBox1 . а вот как указать размер считывания
AET вне форума Ответить с цитированием
Старый 30.06.2011, 21:26   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

С помощью TStream считываете или AssignFile и где должны появиться данные с куска?
Покажите кусок вашего кода где считываете файлы

Последний раз редактировалось Aliens_wolfs; 30.06.2011 в 21:40.
Aliens_wolfs вне форума Ответить с цитированием
Старый 30.06.2011, 21:53   #6
AET
Пользователь
 
Регистрация: 29.02.2008
Сообщений: 60
По умолчанию

Код:
procedure TForm2.Button1Click(Sender: TObject);
var f2, f3: file of byte;
  buf1, buf2, buf3: byte;
  k,i: integer;
  g : string;
begin
  AssignFile(f2,  OpenDialog2.FileName);
  if  Savedialog1.Execute then begin
    AssignFile(f3, SaveDialog1.FileName);
    reset(f2);
    rewrite(f3);
    i := 1;
    while not eof(f2) do
    begin
    if Combobox1.Items = '3200' then
    seek (f2,$40084);вот примерно так
read(f2, buf2);
      buf3 := buf2 xor key1[i];
      i:= i + 1;
      k := buf3 + 1;
      write(f3, key2[k]);
      if i = 65 then  i := 1 ;
      end;
    closefile(f2);
    closefile(f3);
AET вне форума Ответить с цитированием
Старый 30.06.2011, 22:14   #7
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

А до какой позиции вы хотите кусок или до определенного слова или символа?
Нужен завершающий символ или слово или адрес

И '3200' это размер куска?

Последний раз редактировалось Aliens_wolfs; 30.06.2011 в 22:44.
Aliens_wolfs вне форума Ответить с цитированием
Старый 30.06.2011, 23:38   #8
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуй так:

Код:
//Чтение из файла
function OpenFiles(Const FileName: string; var Buffer: Pointer; iSeek: integer; iSize: integer): Integer;
var
 f : File;
 I, Size: integer;
begin
Result:=0;
  {$I-}
   AssignFile(f, FileName);
   FileMode := fmOpenReadWrite;
   Reset (f, 1);
   {$I+}
   i:=IOResult;
   //ошибка открытия файла то выходим
  if i>0 then
  begin
  Showmessage(Format('Ошибка: Неудалось открыть файл %',[FileName]));
  exit;
  end;
  //Определяем размер всего файла
  Size:=filesize(f);
  //Сравниваем размеры всего файла и позиции
  if iSeek>Size then
  begin
  CloseFile(f);
  Showmessage(Format('Ошибка: Указанная позиция iSeek:%d больше размера файла:%d', [iSeek, Size]));
  exit;
  end;
  //Сравниваем размеры всего файла и наш размер
  if iSize>Size then
  begin
  CloseFile(f);
  Showmessage(Format('Ошибка: Указанный размер iSize:%d  больше размера файла:%d', [iSize, Size]));
  exit;
  end;
  //переходим на нужную позицию
  seek(f, iSeek);
  //Если размер 0 то задает размер всего файла для буфера
  if iSize=0 then
  iSize:=Size - iSeek;
  //создаем буфер
 getmem(Buffer, iSize);
 //Читаем файл и записываем в буфер данные
 BlockRead(f, Buffer^, iSize);
 CloseFile(f);
 Result:=iSize;
end;

//Запись в файла
procedure SaveFiles(Const FileName: string; Buffer: Pointer; Size: Integer);
var
  f: file;
begin
   AssignFile(F,Filename);
   FileMode := fmOpenReadWrite;
    rewrite(F, 1);
    BlockWrite(f, Buffer^,size);
    CloseFile(f);
end;

//Использование
procedure TForm1.Button1Click(Sender: TObject);
var
Size: integer;
 Buffer: pointer;
begin
Size:=0;
if (Combobox1.Text = '3200')and(OpenDialog1.Execute) then
Size:=OpenFiles(OpenDialog1.FileName, Buffer, $40084, 65);

//Далее идет пример под каждый параметр в списке Combobox1 подставьте свои
if (Combobox1.Text = '3300')and(OpenDialog1.Execute) then
Size:=OpenFiles(OpenDialog1.FileName, Buffer, $4008, 100);
if (Combobox1.Text = '3400')and(OpenDialog1.Execute) then
Size:=OpenFiles(OpenDialog1.FileName, Buffer, $400, 30);

//Запись в файл
if (Size>0)and(SaveDialog1.Execute) then
SaveFiles(SaveDialog1.FileName, Buffer, Size);
//Уничтожаем буфер
if (Size>0) then
freeMem(buffer);
end;

Последний раз редактировалось Aliens_wolfs; 01.07.2011 в 01:43.
Aliens_wolfs вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлом! Kami-sama Visual C++ 0 07.05.2011 20:48
работа с файлом Iliya Помощь студентам 1 16.12.2010 11:41
[C++] Работа с файлом AquaticSoul Общие вопросы C/C++ 3 29.04.2010 12:10
работа с файлом scudo Общие вопросы Delphi 4 12.11.2009 22:52
работа с файлом lg12 Помощь студентам 7 24.08.2009 08:33