18.11.2009, 18:44 | #1 (permalink) |
Member
Регистрация: 12.02.2007
Сообщений: 165
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 69
|
Открытие нескольких тхт файлов
OpenDialog1.Options := [ofAllowMultiSelect] if OpenDialog1.Execute then begin Memo1.Lines.LoadFromFile(OpenDialog1.Filename); end; |
18.11.2009, 18:44 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Если поискать по форуму, то можно найти много похожего, рекомендую к прочтению Открытие exe файлов Открытие порта Ищу прогу по поиску дубликатов файлов (поиск одинаковых файлов) на диске. Открытие байкерского сезона. Баг при открытие файла Открытие портов |
18.11.2009, 19:00 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Сначала попробуйте их объединить в один большой файл, потом открывайте его через OpenDialog. Нашел такой листинг, но говорю сразу, не проверял.
Код:
Procedure TForm1.ThisISHowIPutFilesIn ; var ABigFileStream, SomeSmallFiles : TMemoryStream ; begin ABigFileStream := TMemoryStream.Create ; try SomeSmallFiles := TMemoryStream.Create ; try SomeSmallFiles.LoadFromFile('C:\SomeSmalFile1.txt'); AddToStream(SomeSmallFiles,ABigFileStream); SomeSmallFiles.LoadFromFile('C:\SomeSmalFile2.txt'); AddToStream(SomeSmallFiles,ABigFileStream); // enz finally SomeSmallFiles.Free ; end; ABigFileStream.SaveToFile('C:\MrBig.DDD') finally ABigFileStream.free ; end; end; Procedure TForm1.ThisISHowIGetStufOut ; var ABigFileStream, SomeSmallFiles : TMemoryStream ; begin ABigFileStream := TMemoryStream.Create ; try ABigFileStream.LoadFromFile('C:\MrBig.DDD'); SomeSmallFiles := TMemoryStream.Create ; try GetFromStream(ABigFileStream,SomeSmallFiles,0); SomeSmallFiles.SaveToFile('C:\SomeSmalFile1.txt'); GetFromStream(ABigFileStream,SomeSmallFiles,1); SomeSmallFiles.SaveToFile('C:\SomeSmalFile2.txt'); // и т.д. finally SomeSmallFiles.Free ; end; finally ABigFileStream.free ; end; end; Procedure TForm1.AddToStream ( Source , Dest : TStream ); var Size : Integer ; begin Source.position := 0 ; // Сохраняем размер, помещая его в первый байт Size := Source.Size ; Dest.Write(Size,SizeOf(Integer)); Dest.CopyFrom(Source,Source.size); end; Procedure TForm1.GetFromStream ( Source , Dest : TStream ; Index : Integer ); Var Size , I : Integer ; begin Source.Position := 0 ; For i := 0 to index-1 do begin Source.Read(Size,SizeOf(Integer)); Source.Position := Source.Position + Size ; end; // Если марк¸р в файле равен размеру, то что-то пошло не так :( if Source.position = Source.Size then Raise EAccessViolation.Create('Index Out Of Bounds') ; // Получаем желаемый размер файла Source.Read(Size,SizeOf(Integer)); // Очищаем буфер у Dest Dest.Position := 0 ; Dest.Size := 0 ; Dest.CopyFrom(Source,Size); end; Использование Memo - не лучший вариант решения в вашем случае, для этого компонента существуют ограничения на размер.
__________________
Убить всех человеков! |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|