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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многократное копирование файла без затирания преды 
V
    Опции темы
Wan22
Дата 18.3.2012, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день. 
Нужно много раз копировать один файл ( этот файл mp3 и в него идет запись) в другую папку, прописанную в edit, но так чтобы следующее копирование не стирало предыдущий скопированный файл. Как сделать , чтобы при последующем копировании, файл нумеровался. Ну например - 1_Запись.mp3, 2_Запись.mp3 и т.д ( Можно и другие варианты сохранения предыдущих копий). 
Написанный мной код сохраняет всего 2 копии, нужно больше.
Вот мой код:
Код

begin
 
  //Копируем созданный mp3 файл и меняем имя предыдущей копии
 
 if not FileExists((PChar(edt1.Text+'Запись.mp3'))) then
  CopyFile('C:\Program Files\My Program\Запись.mp3',(PChar(edt1.Text+'Запись.mp3')),true)
  else
  begin
RenameFile((PChar(edt1.Text+'Запись.mp3')), (PChar(edt1.Text+'1_Запись.mp3')));
CopyFile('C:\Program Files\My Program\Запись.mp3',(PChar(edt1.Text+'Запись.mp3')),true)
end;
 end; 


PM MAIL   Вверх
Данкинг
Дата 18.3.2012, 18:56 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Парсить имя файла, выцеплять этот порядковый номер и увеличивать его на единицу для нового имени файла. Т.е. в твоём случае требуется взять то, что слева от нижнего подчёркивания. Кстати, с FileExists не нужен PChar.

Добавлено через 1 минуту и 22 секунды
А ещё лучше сделать счётчик номеров, который хранить в .ini.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Wan22
Дата 18.3.2012, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Конечно хотелось бы подробней ( с примером счетчика  smile ), но и за подсказку спасибо. 
PM MAIL   Вверх
Данкинг
Дата 18.3.2012, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Ну, поищи про работу с INI, примеров масса. Хотя в данном случае и обычный текстовый файл сойдёт, так как всё равно только одну строчку в нём хранить.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Wan22
Дата 18.3.2012, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ini файл я сделал. Там у меня пользовательские настройки цвета формы и положения окна  сохраняются. Пока не знаю как сделать счетчик. Если не трудно, то какой нибудь бы пример счетчика покажите. Ну а я тем временем параллельно и сам поищу об этом информацию.  smile  
PM MAIL   Вверх
Данкинг
Дата 18.3.2012, 20:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



В ini записываешь переменную. Перед каждым копированием файла считываешь значение переменной увеличиваешь на единицу, и записываешь как в ini вместо старого значения, так и в имя копируемого файла.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Чучмек
Дата 18.3.2012, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


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

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



GetTempFileName


--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
Wan22
Дата 22.3.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Данкинг @ 18.3.2012,  20:16)
В ini записываешь переменную. Перед каждым копированием файла считываешь значение переменной увеличиваешь на единицу, и записываешь как в ini вместо старого значения, так и в имя копируемого файла.

Вот, написал такой код, но не получается, как мне нужно.  smile  В ini создается единица,  имя файла  записывается как 2_Запись.mp3 и все. А мне нужно, чтобы при повторном клике по кнопке, файл записался бы. как 3_Запись.mp3, при следующем клике- как 4_Запись.mp3 и т.д. Что еще надо сделать?
Код

procedure TForm1.btn1Click(Sender: TObject);
var
  Ini: Tinifile;
  i: Integer;

begin
  i:=1;
 ini:=tIniFile.Create(ExtractFilePath(paramstr(0)) + 'Configuration.ini'); // Создал файл ini
 ini.writeinteger('FileName', 'FileNumber',i); // Записал в ini переменную
 ini.readinteger('FileName', 'FileNumber',i);  // Считал значение переменной
 i:= i+1;  // Увеличил на единицу
          // скопировал файл , добавив переменную в имя файла
 CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+inttostr(i)+'_Запись.mp3'),true);
  Ini.Free;
end;
end.


Вот так у меня выходит как я хочу. Но если копировать надо 100 файлов или больше? Это километр кода тогда писать надо  smile  

Код

if not FileExists((edt1.Text+'Запись.mp3')) then
  CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+ 'Запись.mp3'),true)
   else

   if not FileExists((edt1.Text+'1_Запись.mp3')) then
 CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+ '1_Запись.mp3'),true)
   else

   if not FileExists((edt1.Text+'2_Запись.mp3')) then
 CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+ '2_Запись.mp3'),true)
   else

   if not FileExists((edt1.Text+'3_Запись.mp3')) then
 CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+ '3_Запись.mp3'),true); }





Это сообщение отредактировал(а) Wan22 - 22.3.2012, 20:26
PM MAIL   Вверх
Данкинг
Дата 22.3.2012, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



По-моему, порядок операторов должен быть таким:
Код

procedure TForm1.btn1Click(Sender: TObject);
var
  Ini: Tinifile;
  i: Integer;
begin
  i:=1;
 ini:=tIniFile.Create(ExtractFilePath(paramstr(0)) + 'Configuration.ini'); // Создал файл ini
 ini.readinteger('FileName', 'FileNumber',i);  // Считал значение переменной
 i:= i+1;  // Увеличил на единицу
          // скопировал файл , добавив переменную в имя файла
 ini.writeinteger('FileName', 'FileNumber',i); // Записал в ini переменную
 CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+inttostr(i)+'_Запись.mp3'),true);
  Ini.Free;
end;


Это сообщение отредактировал(а) Данкинг - 22.3.2012, 20:56


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
northener
Дата 23.3.2012, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

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



Поправлю. В коде автора две ошибки. Одна - это неверный порядок функций чтения/записи параметров/значений в ini-файл. Вторая - вызов функции как процедуры. Компилятор это позволяет и ошибка не видна тому, кто не изучил (или забыл smile методы класса TIniFile. 
Код

begin
 ini:=tIniFile.Create(ExtractFilePath(paramstr(0)) + 'Configuration.ini'); // Создал файл ini
 i:=ini.readinteger('FileName', 'FileNumber',1);  // Считал значение переменной. Если в ini такого параметра нет, то присвоил номеру файла значение 1
 CopyFile('C:\Program Files\My Program\Запись.mp3', pchar(edt1.Text+inttostr(i)+'_Запись.mp3'),true);
 i:= i+1;  // Увеличил на единицу
 ini.writeinteger('FileName', 'FileNumber',i); // Записал в ini переменную
 Ini.Free;



Это сообщение отредактировал(а) northener - 23.3.2012, 00:33


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Wan22
Дата 23.3.2012, 16:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, друзья, что помогли разобраться.
 
 Исправленный northenerом код, делает то что мне и надо было.  smile 

Если когда- нибудь наберу 100 постов, то плюсы за мной  smile   smile   
PM MAIL   Вверх
RelictOs
Дата 4.4.2012, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот процедура без всяких ini файлов:
Код

var
 i : integer;
begin
 if not FileExists((PChar(edit1.Text+'Запись.mp3'))) then
  CopyFile('C:\Program Files\My Program\Запись.mp3',(PChar(edit1.Text+'Запись.mp3')),true)
 else
  begin
   i := 1;
   while FileExists((PChar(edit1.Text+IntToStr(i)+'_Запись.mp3'))) do
    i := i + 1;
   CopyFile('C:\Program Files\My Program\Запись.mp3',(PChar(edit1.Text+IntToStr(i)+'_Запись.mp3')),true)
  end;
end;

PM MAIL ICQ Skype   Вверх
Wan22
Дата 5.4.2012, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



RelictOs, спасибо  smile 
PM MAIL   Вверх
RelictOs
Дата 5.4.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Wan22, рад помочь.. а могу поинтересоваться - над чем вы таким работаете?
PM MAIL ICQ Skype   Вверх
Wan22
Дата 5.4.2012, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну очередной велосипед  smile .  Интернет онлайн радио с возможностью записи.   

Это сообщение отредактировал(а) Wan22 - 5.4.2012, 19:17
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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