Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

уникальное имя файла


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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо