Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42

Объединить файлы

20.08.2018, 21:34. Показов 6154. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят подскажите, как объединить несколько файлов в один файл по типу архива, только архивация не нужна! Просто нужно взять несколько файлов например mp3, txt, pdf, jpg и объединить их в один файл, а потом чтобы можно было из этого файла их достать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.08.2018, 21:34
Ответы с готовыми решениями:

Объединить bat файлы
Подскажите как можно объединить эти файлы: @echo off setlocal enabledelayedexpansion chcp 1251>nul set fdir=d:\1\set\s set...

Как объединить файлы?
Допустим, я хочу сделать программу на с++, интерфейс к ней на с#. Как это осуществить? Спасибо!

Объединить файлы программы
Есть 2 программы, на них вылеты при запуске Программы разбиты на части, подскажите пожалуйста как их объединить в одну (из 3 или двух...

46
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
21.08.2018, 16:02  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Verevkin Посмотреть сообщение
В коде выше нет работы с именами.
Я знаю что в том коде нет работы с именами, поэтому и прошу помочь с добавлением этой самой работы в тот код.
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,915
21.08.2018, 16:10
Цитата Сообщение от Ladushka Посмотреть сообщение
прошу помочь с добавлением этой самой работы в тот код.
Мне тот код не нравится. Посмотри #3.
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
21.08.2018, 16:31  [ТС]
Verevkin, Можете пример кодом привести той схемы которую вы описали в #3?
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,915
21.08.2018, 16:35
Цитата Сообщение от Ladushka Посмотреть сообщение
Можете пример кодом привести той схемы которую вы описали в #3?
Мне, чо, написать прогу за тебя, штоли?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
21.08.2018, 17:21
Цитата Сообщение от Ladushka Посмотреть сообщение
Можете пример кодом привести той схемы которую вы описали в #3?

грубо вот так...

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
 
  TFileHeader = record
    Name: String[50];
    Size: Int64;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure SaveFile(AFileName: String; APartName: String; ASource: TStream);
var F: TFileStream;
    H: TFileHeader;
begin
  if not FileExists(AFileName) then
    F := TFileStream.Create(AFileName, fmCreate)
 
  else
    begin
      F := TFileStream.Create(AFileName, fmOpenReadWrite);
      F.Seek(0, soFromEnd)
    end;
 
  H.Name := ShortString(APartName);
  H.Size := ASource.Size;
 
  F.WriteBuffer(H, SizeOf(H));
 
  F.CopyFrom(ASource, ASource.Size);
 
  FreeAndNil(F);
end;
 
procedure LoadFile(AFileName: String);
var F: TFileStream;
    M: TMemoryStream;
    H: TFileHeader;
    i: Int64;
begin
 
  F := TFileStream.Create(AFileName, fmOpenRead);
 
  F.Seek(0, soFromBeginning);
  i := 0;
 
  while F.Position <= F.Size - 1 do
    begin
      F.ReadBuffer(H, SizeOf(H));
 
      M := TMemoryStream.Create;
 
      M.CopyFrom(F, H.Size);
      M.SaveToFile('C:\__' + IntToStr(i) + String(H.Name)); // тут распаковку, как душа пожелает )
 
      FreeAndNil(M);
      i := i + 1;
    end;
 
  FreeAndNil(F);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var F: TFileStream;
begin
  // тут к примеру можно через OpenDialog добавление сделать... или как душа пожелает )
  F := TFileStream.Create('C:\111.txt', fmOpenRead);
  SaveFile('C:\123.qqq', '111.txt', F);
  FreeAndNil(F);
 
  F := TFileStream.Create('C:\123.mp3', fmOpenRead);
  SaveFile('C:\123.qqq', '123.mp3', F);
  FreeAndNil(F);
 
  F := TFileStream.Create('C:\asdf.jpg', fmOpenRead);
  SaveFile('C:\123.qqq', 'asdf.jpg', F);
  FreeAndNil(F);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  LoadFile('C:\123.qqq');
end;
 
end.
можешь проверить чтов файле лежит)

только разархивируй его сперва, так не разрешило загрузить
Вложения
Тип файла: 7z 123.7z (7.41 Мб, 9 просмотров)
1
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
21.08.2018, 18:36  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Мне, чо, написать прогу за тебя, штоли?
Нет!
Arcor, Спасибо тебе огромное! Но при распаковки файла большого размера почти 2Гб выпадает в ошибку "Out fo memory", с файлами маленького размера все нормально за исключением того, что при распаковки у файлов в начале имени прописывается цифра по порядку 0 1 2 3 ...

Добавлено через 7 минут
Ну с цифрами в начале имени это понятно можно убрать, а как решить проблему с "недостаточно памяти"?

Добавлено через 2 минуты
Я просто делала распаковку по типу этого кода:
Delphi
1
2
3
4
5
6
  fs1 := TFileStream.Create('file.123', fmOpenWrite);
  fs2 := TFileStream.Create('1.mp3', fmOpenRead);
  f := fs2.Size;
  fs1.Write(f, SizeOf(Int64));
  fs1.CopyFrom(fs2, f);
  fs2.Free;
И проблем не возникало с большими файлами, распаковывались без ошибок.
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
21.08.2018, 20:49  [ТС]
Цитата Сообщение от Ladushka Посмотреть сообщение
при распаковки файла большого размера почти 2Гб выпадает в ошибку "Out fo memory"
Цитата Сообщение от Ladushka Посмотреть сообщение
как решить проблему с "недостаточно памяти"?
Я так понимаю что проблема с TMemoryStream? Можно как то без него обойтись не теряя работоспособности кода? Может чем то заменить?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
21.08.2018, 20:58
Цитата Сообщение от Ladushka Посмотреть сообщение
при распаковки файла большого размера почти 2Гб выпадает в ошибку "Out fo memory"
я бы подсказал. но я не работал никогда в сем направлении и не сталкивался с такими прблемами, так что - увы
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
21.08.2018, 23:15  [ТС]
Может есть еще какие варианты решения вопроса по записи и чтении имен файлов? или только такое?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
21.08.2018, 23:26
я как-то пользовался Zlib, она у меня в дельфи стартере ХЕ есть только, нормального архиватора там нету. и вот там идет не совсем архивация, как архиватором, а просто используются алгоритмы архивации. обычным архиватором не открывает, говорит что битый архив. попробуй этой. может поможет. по-другому я никогда ничего не делал, поэтому не знаю

Добавлено через 5 минут
Цитата Сообщение от Ladushka Посмотреть сообщение
Я так понимаю что проблема с TMemoryStream? Можно как то без него обойтись не теряя работоспособности кода? Может чем то заменить?
замени на TFileStream, как говришь у тебя не возникло проблем в твоем коде. у меня то точно так используется, только я TMemoryStream взял
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
22.08.2018, 10:32  [ТС]
Цитата Сообщение от Arcor Посмотреть сообщение
замени на TFileStream
Я пробовала заменить, но с кодом проблема возникла. Вот как эту строчку переделать под FileStream? А то ругается на SaveToFile.
Delphi
1
M.SaveToFile('C:\__' + IntToStr(i) + String(H.Name));
И вообще достаточно будет заменить M: TMemoryStream; на M: TFileStream; чтобы все работало?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
22.08.2018, 10:40
там нету этого метода, потому что имя создаваемого/читаемого/пишущего файла ты задаешь тут вот

Delphi
1
TFileStream.Create(AFileName, fmOpenRead);
т.е. в конструкторе ты соединяешь объект и файл.

после конструктора надо будет сделать
Delphi
1
CopyFrom(F, H.Size);
и затем высвободить память. у тебя в твоем примере сделано так же)))
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
22.08.2018, 11:40  [ТС]
Я уже запуталась совсем или не могу понять просто как это должно работать. Вот сделала так в вашем коде:
Delphi
1
2
3
4
M:=TFileStream.Create(AFileName, fmOpenRead);
F.ReadBuffer(H, SizeOf(H));
M.CopyFrom(F, H.Size);
FreeAndNil(M);
Но пишет при распаковки, что "C:\123.qqq Невозможно получить доступ к файлу, так как файл занят другим процессом".
У меня вот такой код упаковки и распоковки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
  fs1 := TFileStream.Create('file.123', fmOpenWrite);
  fs2 := TFileStream.Create('1.mp3', fmOpenRead);
  f := fs2.Size;
  fs1.Write(f, SizeOf(Int64));
  fs1.CopyFrom(fs2, f);
  fs2.Free;
 
  fs1 := TFileStream.Create('file.123', fmOpenRead);
  fs2 := TFileStream.Create('1.mp3', fmOpenWrite);
  fs1.Read(f, SizeOf(Int64));
  fs1.CopyFrom(fs2, f);
  fs2.Free;
Но тут приходится явно указывать имя файла. Что не так я делаю?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
22.08.2018, 11:52
как минимум надо fs1 удалять
Цитата Сообщение от Ladushka Посмотреть сообщение
Delphi
1
fs1.Write(f, SizeOf(Int64));
а почему берется размер 64-битного числа? а не реальный размер файла?

Добавлено через 7 минут
Цитата Сообщение от Ladushka Посмотреть сообщение
Я уже запуталась совсем или не могу понять просто как это должно работать. Вот сделала так в вашем коде:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure LoadFile(AFileName: String);
var F: TFileStream;
    M: TFileStream;
    H: TFileHeader;
    i: Int64;
begin
 
  F := TFileStream.Create(AFileName, fmOpenRead); // общий файл, в который все остальное упакованно
 
  F.Seek(0, soFromBeginning);
  i := 0;
 
  while F.Position <= F.Size - 1 do
    begin
      F.ReadBuffer(H, SizeOf(H));
 
      M := TFileStream.Create('C:\__' + IntToStr(i) + String(H.Name), fmCreate); // файл, который будет "извлечен" из упакованного
 
      M.CopyFrom(F, H.Size);
      //M.SaveToFile('C:\__' + IntToStr(i) + String(H.Name)); // тут распаковку, как душа пожелает )
 
      FreeAndNil(M);
      i := i + 1;
    end;
 
  FreeAndNil(F);
end;
попробуй с большими файлами, будет ли ошибка Out of Memory?
1
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
22.08.2018, 12:29  [ТС]
Цитата Сообщение от Arcor Посмотреть сообщение
а почему берется размер 64-битного числа? а не реальный размер файла?
Я просто где то читала документацию по работе с FileStream и там как пример было так указано, сделала так же все работает и не думала что это не верно. Я только начинаю изучать программирование, поэтому просто не знаю как правильно делать. А можете пояснить в чем разница и какие последствия могли быть?
Цитата Сообщение от Arcor Посмотреть сообщение
попробуй с большими файлами, будет ли ошибка Out of Memory?
Ура! Спасибо огромное! Вы мой спаситель! Теперь работает как надо! Странно вроде я пыталась так делать но у меня все равно ошибки вылетали, ну значит что то не так делала.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
22.08.2018, 12:35
Цитата Сообщение от Ladushka Посмотреть сообщение
Я просто где то читала документацию по работе с FileStream и там как пример было так указано, сделала так же все работает и не думала что это не верно. Я только начинаю изучать программирование, поэтому просто не знаю как правильно делать. А можете пояснить в чем разница и какие последствия могли быть?
если бы мы записывали бы в файл 64битное число, нам надо было бы указать размер блока 64 бита, а если у нас будет блок размером 1 байт, а не 8? то надо было бы писать разимер 1 байта.. а если бы мы записывали бы туда размер в 2 гигабайта? то и размер надо указывать 2 гб, чтобы функция записи знала сколько мы ей данных скармливаем. Чтобы все это обхяснить в деталях, это надо начинать не с этого, а на более низком уровне, для начинающего будет только путаница) вобщем там стоит размер записываемого блока в бйтах, точка )

Цитата Сообщение от Ladushka Посмотреть сообщение
Ура! Спасибо огромное! Вы мой спаситель!
ой ))
0
22.08.2018, 14:15

Не по теме:

опасно)) спаситель по слухам плохо кончил

0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 42
22.08.2018, 14:49  [ТС]
Цитата Сообщение от Arcor Посмотреть сообщение
если бы мы записывали бы в файл 64битное число, нам надо было бы указать размер блока 64 бита, а если у нас будет блок размером 1 байт, а не 8? то надо было бы писать разимер 1 байта.. а если бы мы записывали бы туда размер в 2 гигабайта? то и размер надо указывать 2 гб, чтобы функция записи знала сколько мы ей данных скармливаем. Чтобы все это обхяснить в деталях, это надо начинать не с этого, а на более низком уровне, для начинающего будет только путаница) вобщем там стоит размер записываемого блока в бйтах, точка )
Спасибо! Получается я просто указывала (64) то есть какую-то часть данных, а не весь ее размер сразу? А сейчас мы указали сразу весь размер и программа понимает с чем ей работать и каким объемом? Правильно я поняла?
Цитата Сообщение от krapotkin Посмотреть сообщение
опасно)) спаситель по слухам плохо кончил
Ну что же вы так. Arcor, мне помог, объяснил и я очень ему признательна за это. А вот Verevkin, мне показалось исполнял роль местного тролля имхо, не в обиду сказано. Надеюсь он на самом деле не такой человек и пытался возможно до меня что то донести, ну а я как человек начинающий и не опытный этого не смогла понять.
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
22.08.2018, 15:12
Цитата Сообщение от Ladushka Посмотреть сообщение
Получается я просто указывала (64)
SizeOf(Int64) дает в результате 8 байт, получается ты давала кусок блоку 8 байт)) а не реальный размер его
Цитата Сообщение от Ladushka Посмотреть сообщение
А сейчас мы указали сразу весь размер и программа понимает с чем ей работать и каким объемом? Правильно я поняла?
ну вроде так все, да
Цитата Сообщение от krapotkin Посмотреть сообщение
опасно)) спаситель по слухам плохо кончил
Цитата Сообщение от Ladushka Посмотреть сообщение
Ну что же вы так.
это вы о чем?))
0
Нарушитель
10897 / 5831 / 1289
Регистрация: 12.03.2015
Сообщений: 26,915
22.08.2018, 15:20
Цитата Сообщение от Ladushka Посмотреть сообщение
А вот Verevkin, мне показалось исполнял роль местного тролля имхо, не в обиду сказано.
Когда кажется, знаешь, чо делать надо? Я ж тебе русским по белому разжевал структуру контейнера. Это троллинг, дыа?
Цитата Сообщение от Ladushka Посмотреть сообщение
Надеюсь он на самом деле не такой человек и пытался возможно до меня что то донести, ну а я как человек начинающий и не опытный этого не смогла понять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2018, 15:20

Объединить эти файлы
Помогите решить Даны два файла вещественных чисел с именами с1 и с2,элементы которых упорядочены по возростанию.Объеденить эти файлы в...

Объединить все файлы
Написать сценарий, который объединяет все файлы в каталоге, указанном в качестве первого параметра, с расширением, указанным в качестве...

Объединить pdf файлы
Подскажите софт, с помощью которого можно объединить несколько pdf файлов в один.

Объединить файлы приложения в один
Здравствуйте. Работаю в Visual Studio 2010. Пишу программу в &quot;windows forms application&quot;. В программе использую много изображений....

Объединить txt файлы в один
Добрый вечер. Начинал не так давно учиться программировать на VBA по работе нужно, сейчас потихоньку перехожу на VB.net понимаю с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru