![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
уникальное имя файла
Phoenix7 © (2012-12-17 11:25:00)Нужно быстро генерировать уникальные имена для сохраняемых файлов (jpg) в рамках определенной папки. Как это лучше сделать? Цикл с FileExists не пойдет.
брат Птибурдукова (2012-12-18 17:38:00) [1]
> DVM © (18.12.12 10:08) [13]
Аукцион на "золотые номера" типа АААААААА-...
Anatoly Podgoretsky (2012-12-18 15:08:00) [2]> DVM (18.12.2012 10:08:13) [13]
За деньги что угодно.
Ega23 (2012-12-18 13:34:00) [3]
> Платные GUID это интересная идея.
Так уже же... В MSDN есть
DVM (2012-12-18 10:08:00) [4]
> Игорь Шевченко © (17.12.12 17:39) [10]
Платные GUID это интересная идея.
O'ShinW (2012-12-18 09:32:00) [5]CoDeCreateGuid(Guid)? :)
Боюсь, это не осуществимо. Вряд ли где то запоминаются хоть какие-то гайды.
Inovet (2012-12-17 18:38:00) [6]> [10] Игорь Шевченко © (17.12.12 17:39)
> Гореть вам в аду
Ничего, по просьбе автора статьи в МС одумаются и введут функцию возврата GUID.
Игорь Шевченко (2012-12-17 17:39:00) [7]Ega23 © (17.12.12 13:24) [8]
O'ShinW © (17.12.12 14:12) [9]
http://www.rsdn.ru/article/mag/200301/GUIDEcology.xml
Гореть вам в аду
O'ShinW (2012-12-17 14:12:00) [8]function CreateGUID(out Guid: TGUID): HResult;
begin
Result := CoCreateGuid(Guid);
end;
Ega23 (2012-12-17 13:24:00) [9]CoCreateGUID
brother (2012-12-17 12:33:00) [10]> не то,
тогда пиши то, ты в [0] ничего не уточнял...
O'ShinW (2012-12-17 11:58:00) [11]
> папке X есть файлы 1.jpg, 2.jpg, ..., 9.jpg. Я сохраняю
> файл, он должен сохраниться с уникальныным именем, в данном
> случае - 10.jpg
хорошо
пусть есть супер быстрая процедура, сообщающая следующее имя
1. Спрашиваем у нее имя.
2. Пишем под этим именем.
Что будет если в момент времени 1.5 между этими событиями процедуру запросили еще раз(другой поток / другой юзер)
1. она вернула тоже имя, что и до этого. -> Кто-то будет перезатёрт.
2. она вернула "следующее". Но кто-то отказался от записи, имя не используется. -> Образовалась брешь в нумерации. Какая разница как нумеровать?
-------
Программу юзает один человек, потоков нет.
Тут, думаю, нужен класс-записывальщик.
Один раз он вычисляет через FileExists последний номер файла, и раздаёт при каждом обращении следующее. Если кто-то отказался писать(а писать только через него можно, поэтому он знает что отказались) - имя может быть выдано еще раз.
O'ShinW (2012-12-17 11:43:00) [12]ShowMessage( FormatDateTime('YYYYMMDDhhmmss-', now) + inttostr(GetTickCount) );
O'ShinW (2012-12-17 11:36:00) [13]var
G: TGUID;
begin
CreateGUID(G);
ShowMessage( GUIDToString(G) );
Phoenix7 (2012-12-17 11:35:00) [14]
> brother ©
не то, в папке X есть файлы 1.jpg, 2.jpg, ..., 9.jpg. Я сохраняю файл, он должен сохраниться с уникальныным именем, в данном случае - 10.jpg
RWolf (2012-12-17 11:33:00) [15]GetTempFileName, как вариант.
brother (2012-12-17 11:30:00) [16]
randomize;
name:='';
for i=0 to 20 do
name:= name + chr(random(26)+65);