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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с чтением из файла 
:(
    Опции темы
ShadowDancer
Дата 27.10.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Читаю файл вот так:
Код

procedure CopyPart(FromFile, ToFile: string);
var
 FromF, ToF: file;
 NumRead, NumWritten, i: Integer;
 Buf: array[1..524288] of Char;
begin
 AssignFile(FromF, FromFile);
 Reset(FromF, 1);
 Seek(FromF, 1024*1024*2);
 AssignFile(ToF, ToFile);
 Rewrite(ToF, 1);
 //repeat
  //BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
  //BlockWrite(ToF, Buf, NumRead, NumWritten);
 //until (NumRead = 0) or (NumWritten <> NumRead);
 for i := 1 to 4 do
 begin
  BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
  BlockWrite(ToF, Buf, NumRead, NumWritten);
  if (NumRead = 0) or (NumWritten <> NumRead) then Break;
 end;
 CloseFile(FromF);
 CloseFile(ToF);
end;


когда я делаю Seek(FromF, 1024*1024*2); а потом сохраняю, то файл с нулевыми байтами получается, а если поставить Seek чуть по меньше, то всё ОК... как быть, чтобы нормально считывался файл ?
PM MAIL   Вверх
VICTAR
Дата 27.10.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Какого размера файл? Если есть возможность, то может стоит его приложить к коду?
PM MAIL   Вверх
ShadowDancer
Дата 27.10.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Обычный видео-файл, размер 26 мегов.
PM MAIL   Вверх
ShadowDancer
Дата 28.10.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Эмм... У вас нормально считывает ?
PM MAIL   Вверх
kristalik
Дата 28.10.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



файловыми патоками воспользуйся : пример в любом учебнике.

а зачем {Seek(FromF, 1024*1024*2);}  прыгаеш на на начало 3 мегобайта?
PM MAIL   Вверх
ShadowDancer
Дата 28.10.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пробовал через мемори стрим сделать - всё равно не получается ((
Мне вообще нужно сохранить на диск маленький кусочек большого файла.

Добавлено через 3 минуты и 2 секунды
Прыгаю из-за того что мне нужно сохранить на диск не первые 2мб файла, а 2мб, которые находятся после позиции в 1024*1024*2
PM MAIL   Вверх
kristalik
Дата 28.10.2007, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

procedure copyfile(in,out:string;nachalo,kones:int);{nachaloначальный блок,kones- конечный блок, размер блока 1 байт}
var sin,sout:TFilestream;

begin
   sin=TfileStream.create(in,fmopenread);
   sout=TfileStream.create(out,fmopenwrite or fmCreate);
sin.position=nachalo;
   sout.copyform(sin,nachalo-kones);
sout.free;
sin.free;
end;


Добавлено через 8 минут и 51 секунду
учти копирование производится имеенно в формате символьного файла, а не вырезка фрогмента видеео.

Это сообщение отредактировал(а) kristalik - 28.10.2007, 20:33
PM MAIL   Вверх
ShadowDancer
Дата 28.10.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Трохи поправил процедурку, т.к. не компилися твоя
Код

procedure copyfile_(inF, outF:string;nachalo, kones:integer);{nachaloíà÷àëüíûé áëîê,kones- êîíå÷íûé áëîê, ðàçìåð áëîêà 1 áàéò}
var
  sin,sout:TFilestream;
begin
 sin := TfileStream.create(inF, fmopenread);
 sout := TfileStream.create(outF, fmopenwrite or fmCreate);
 sin.position := nachalo;
 sout.copyfrom(sin, kones-nachalo);
 sout.free;
 sin.free;
end;


Вызываю вот так: 
CopyFile_('F:\Имя_большого_фильма.avi', 'test.txt', 1024*1024, 1024*1024*2);
В резльтате в test.txt, получается вовсе не то содержимое что находится по этим позициям в большом файле. На мальньких файлах всё работает отлично (даже с той процедурой, которую я использовал). Проверьте пожалуйста, у вас код корректно работает ?

Это сообщение отредактировал(а) ShadowDancer - 28.10.2007, 21:11
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.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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