Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906

Автоматическое изменение имени файла при записи лога. (Инкремент имени)

11.12.2013, 13:59. Показов 2623. Ответов 0

Студворк — интернет-сервис помощи студентам
Господа, возникла у меня как-то потребность записи лога в файл. И требовалось записывать в схожий по названию файл, но каждый раз в разный. То есть один раз устанавливается имя файла, а потом оно автоматически изменяется по какому-то признаку. В частности приписывается счетчик записей.
Сейчас переписал в божеский вид и решил поделиться. Вдруг кому пригодится.
Сама функция
C++
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
String IncFileName( String FullFilePathAndNameOrName )
{
  while( FullFilePathAndNameOrName.IsPathDelimiter(1) )                               // Если начинается с разделителя пути
    FullFilePathAndNameOrName = FullFilePathAndNameOrName.Delete( 1, 1 );
  FullFilePathAndNameOrName = FullFilePathAndNameOrName.Trim();
  FullFilePathAndNameOrName = StringReplace( FullFilePathAndNameOrName, "/", "\\", TReplaceFlags() << rfReplaceAll );
 
  if( !FullFilePathAndNameOrName.Pos(":") )                                           // Полный ли это путь?
    FullFilePathAndNameOrName = GetCurrentDir() + "\\" + FullFilePathAndNameOrName;   //  Если нет, то плясать от текущей папки
 
  String FileExtension = "";                                                                   //// Поиск расширения файла
  if( FullFilePathAndNameOrName.Pos(".") )                                                       //
    FileExtension = FullFilePathAndNameOrName.SubString(                                         //
                                              FullFilePathAndNameOrName.LastDelimiter("."),      //
                                              FullFilePathAndNameOrName.Length()                 //
                                                        );                                     ////
 
  String FileName = FullFilePathAndNameOrName.SubString(                                       //// Поиск имени файла
                                              FullFilePathAndNameOrName.LastDelimiter("\\") + 1, //  //+1 == '\'.Leangth()
                                              FullFilePathAndNameOrName.Length()                 //
                                                        );                                       //
  FileName = FileName.Delete(                                                                    //
                      FileName.LastDelimiter("."),                                               //
                      FileName.Length()                                                          //
                             );                                                                ////
 
 
  String FileNum = FileName;                                                       //// Поиск номера файла
  while( FileNum.IsDelimiter( "1234567890", FileNum.Length() ) )                     //
    FileNum.Delete( FileNum.Length(), FileNum.Length() );                            //
                                                                                     //
  if( FileNum == FileName )                                                          //
    FileNum = "0";                                                                   //
  else                                                                               //
    FileNum = FileName.SubString(                                                    //
                                 FileName.LastDelimiter( FileNum ) + 1,              //
                                 FileName.Length()                                   //
                                 );                                                ////
 
  String FilePath = FullFilePathAndNameOrName.SubString(                           //// Получение пути
                                              0,                                     //
                                              FullFilePathAndNameOrName.Pos( FileName + FileExtension ) - 1
                                                        );                         ////
 
  FileName.Delete(                                                         //// Обрезка имени до номера
                  FileName.Pos( FileNum ),                                   //
                  FileName.Length()                                          //
                  );                                                       ////
 
 
  while( FileExists( FullFilePathAndNameOrName ) )                           // Проверка на существование
    {
    FileNum = StrToInt( FileNum.ToInt() + 1 );
    FullFilePathAndNameOrName = FilePath + FileName + FileNum + FileExtension;
    }
 
return FullFilePathAndNameOrName;
}


Пример использования
C++
1
2
3
4
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  WriteLog( IncFileName( Edit1->Text ) );
}

Функция разбивает входящую строку на путь файла, имя файла, номер файла, расширение файла для последующей удобной работы с ними. Ничего особенного. Но при желании, к примеру, легко дополняется временем,
C++
52
FullFilePathAndNameOrName = FilePath + FileName + Time() + FileExtension;
или переставляет счетчик перед именем
C++
52
FullFilePathAndNameOrName = FilePath + FileNum + FileName + FileExtension;
и так далее.


Примеры работы в табличке:
Входящее значение Путь Имя Счетчик Расшерение Возвращаемое значение Комментарий
C:\\Rab\\Measure\\log.txt C:\\Rab\\Measure\\ log 7 .txt C:\\Rab\\Measure\\log7.txt Дописалась цифра семь, так как файлы с log.txt по log6.txt уже существуют
C:\\Rab\\Measure\\North1_.txt C:\\Rab\\Measure\\ North1_ 1 .txt C:\\Rab\\Measure\\North1_0.txt Дописалась цифра ноль, так как файл North1_.txt уже существует
C:\\Program Files\\Porn\\Deep.avi C:\\Program Files\\Porn\\ Deep 0 .avi C:\\Program Files\\Porn\\Deep.avi Ничего не изменилось так как нет такого файла по этому адресу
dghdjh88h3jng09 C:\\Bilder\\Project\\ dghdjh88h3jng09 0 NULL C:\\Bilder\\Project\\dghdjh88h3jng09 Дописана директория откуда запущена программа
3
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2013, 13:59
Ответы с готовыми решениями:

Разница в работе bat-файла при его запуске от имени простого пользователя и от имени администратора
Здравствуйте. Пытаюсь создать .bat который: создаёт папку %ProgramFiles%\MyProg и копирует туда файлы создаёт папку...

Автоматическое изменение имени массива
Приветствую! Имеется следующий цикл: For i = 0 To N Dim array(3) As Integer array(i) = TextBox2.Lines(i) array(i + 1)...

Изменение имени при перетаскивании файла на форму
При запуске программа отображает форму (пустую, не важно какую). Если Вы бросаете мышкой файл на эту форму, то программа его ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2013, 13:59
Помогаю со студенческими работами здесь

Изменение имени файла при распаковке множества архивов
Доброго времени суток. Сделал для себя простенький батничек для распаковки большого количества zip-архивов md &quot;папка где лежит...

Запретить изменение имени в свойствах файла при переименовании
Если переименовать exe файл в другое имя То и описание файла в свойствах то же измениться Видел многие exe файлы Имя файла одно ...

Задание имени файла пользователем при чтении и записи
Программа должна осуществлять запись в файл или чтение из файла (по выбору пользователя) целых чисел. Пока я написала вот такой код: ...

Изменение имени файла при выгрузке отчета access 2010 в PDF
Добрый вечер! очень нужно сформированный отчет выгрузить в PDF фаил с указанием в имени дату или какой-нибудь порядковый номер или с...

Как сделать проверку на наличие похожего имени файла и запрос нового имени файла?
При загрузке изображения присваивается имя foto.jpg. Вопрос, как сделать проверку на то что фото с таким именем существует и если он...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru