Вниз
Скачать: CL | DM;

Разбиение файла на части   Найти похожие ветки 

← →
anonymous   (2004-09-13 11:16) [0]

Добрый день (вечер)!!!! Помогите пожалуйста. Необходимо файл разбить на части, размером меньше, а затем собрать в первоначальный вид. Пробовал использовать компонент ZIP TV, но не смог нейти данной функции и в примерах (поставляемых с етим компонентом) также ничего похожего не нашёл.


← →
kukuikar ©   (2004-09-13 11:36) [1]

так тебе нужна прога или алгоритм?


← →
icebeerg ©   (2004-09-13 12:45) [2]

var f:file of char;

...

AssignFile(f,...
repeat
...
until EOF(f);

Сам идею разовьеш?


← →
anonymous   (2004-09-14 09:34) [3]

kukuikar: Нужен алгоритм, а лучше готовая процедура.

icebeerg: Открыть файл как символьный это понятно, а как зделить из первых 200 символов новый файл? И как потом собрать все куски в один файл? Подскажи пожалуйста!


← →
Рамиль ©   (2004-09-14 09:38) [4]

TFileStream + F1


← →
dima_shapkin   (2004-09-14 10:07) [5]

CreateFile, ReadFile, WriteFile...
See Windows SDK


← →
icebeerg ©   (2004-09-14 10:28) [6]

>anonymous   (14.09.04 09:34) [3]
Нет, ну это издевательство какое-то. Ты вообще хоть книжки то читаеш? Головой думаш? Если до вечера никто не сподобиться кинуть тебе готовый алгоритм так уж и быть сделаю...


← →
kukuikar ©   (2004-09-14 10:32) [7]

//резать
//размер кусков указывается в байтах
function SplitFile(FileName : TFileName; SizeofFiles :Integer): Boolean;
var
 i : Word;
 fs, sStream: TFileStream;
 SplitFileName: String;
begin
 fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
 try
   for i := 1 to Trunc(fs.Size / SizeofFiles) + 1 do
   begin
     SplitFileName := ChangeFileExt(FileName, "."+ FormatFloat("000", i));
     sStream := TFileStream.Create(SplitFileName, fmCreate or fmShareExclusive);
     try
       if fs.Size - fs.Position < SizeofFiles then
         SizeofFiles := fs.Size - fs.Position;
       sStream.CopyFrom(fs, SizeofFiles);
     finally
       sStream.Free;
     end;
   end;
 finally
   fs.Free;
 end;
end;

//клеить
//чтобы собрать файлы нужно указать первый кусок.
//он будет с расширением *.001
function CombineFiles(FileName, CombinedFileName : TFileName) : Boolean;
var
 i: integer;
 fs, sStream: TFileStream;
 filenameOrg: String;
begin
 i := 1;
 fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive);
 try
   while FileExists(FileName) do
   begin
     sStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
     try
       fs.CopyFrom(sStream, 0);
     finally
       sStream.Free;
     end;
     Inc(i);
     FileName := ChangeFileExt(FileName, "."+ FormatFloat("000", i));
   end;
 finally
   fs.Free;
 end;
end;
//вот собственно и все
//можно еще добавить проверку CRC32


← →
Рамиль ©   (2004-09-14 10:48) [8]

icebeerg ©   (14.09.04 10:28) [6]
Только не надо делать

> var f:file of char;
это будет через одно место.


← →
icebeerg ©   (2004-09-14 10:50) [9]

> kukuikar ©   (14.09.04 10:32) [7]
Кинул таки anonymous"у функции. А я уже сам начал писать с использование BlockRead и BlockWrite. Но твоего кода хватит.
А склеить файлы вообще тривиально можно коммандой copy... ;)


← →
icebeerg ©   (2004-09-14 10:53) [10]

> Рамиль ©   (14.09.04 10:48) [8]
Согласен, но это первое, что на ум приходит. Читать и писать файлы посимвольно это... :)


← →
kukuikar ©   (2004-09-14 11:37) [11]


> А склеить файлы вообще тривиально можно коммандой copy...
> ;)

мона-мона:)


← →
anonymous   (2004-09-15 10:19) [12]

Спасибосо всем кто откликнулся.
Код kukuikar"а нормольно работает. Ему отдельное спасибо!!!!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.024 c
3-1094532502
Павел
2004-09-07 08:48
2004.10.03
работа с MSSQL Server на других компах.


1-1095092611
Yanis
2004-09-13 20:23
2004.10.03
Frame


14-1095021971
Knight
2004-09-13 00:46
2004.10.03
Вопрос к тем, кто ходит в церковь...


3-1094620430
BanderLog_t
2004-09-08 09:13
2004.10.03
Blob-поля больших размеров.


14-1095306740
КаПиБаРа
2004-09-16 07:52
2004.10.03
Опрос - Когда вы впервые пришли на этот форум?




   Наверх