Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Случайные имена


Автор: Nightwish 1.3.2004, 11:54
Здравствуйте.

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

Автор: Bodya 1.3.2004, 12:17
Создавай имена файлов с цифрами. Например Temp001, Temp002 и т.д.

Автор: Maverick 1.3.2004, 12:45
А еще лучше использовать точное время создания файла....
Тогда повторов точно не будет.... В зависимости от времени создания, используй и миллисекунды, секунды, часы....

У меня была такая проблема... с нескольких компов на сервер сбрасывались файлы... Постоянно, надо чтоб имена ни в коем случае не повторялись... Но специфика в том, что один комп не мог бы сбросить файл быстрее чем за секунду....Поэтому принцип был такой <имя файла>=<постоянная часть>+<ID компа>+<Дата (для удобства перевел в String без точек)>+<Количество секунд после полуночи>.... ну это кому как удобно.... примерно так....

Автор: Pakshin A. S. 2.3.2004, 22:43
Код

function GetName(const LengthN:integer):string;
var
  i:integer;
begin
 Randomize;
 Result:='';  
 for i:=1 to LengthN do
   Result:=Result + chr(Random(26) - 96)
end;


Идея такова... biggrin.gif

Автор: x77 2.3.2004, 22:46
Pakshin A. S., хорошая идея. и чему будет равен Chr (-96)?

у тебя всегда будет формироваться пустая строка.

Автор: Pakshin A. S. 2.3.2004, 22:51
Имелся ввиду плюсик, ошибся, простите biggrin.gif Да ещё, наверное, и 97 нужно...

Мозги сегодня не работают...

Автор: Pakshin A. S. 2.3.2004, 22:56
Сунул, получил пробелbiggrin.gif

Автор: x77 2.3.2004, 23:05
самый нормальный вариант предложил Maverick smile.gif а у тебя возможны, хотя и маловероятны, повторы. есть ещё один "железобетонный" вариант. можно вызывать CreateClassId, т.е. получать идентификатор GUID, который якобы уникален во вселенный (по крайней мере, COM-технология только на этом и держится).

Код

uses
 ComObj;

...

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
begin
 s := CreateClassId; // получаем GUID
 s := StringReplace (Copy (s, 2, Length (s) - 2), '-', '', [rfReplaceAll]); // убираем "{", "}" и "-"
 ShowMessage (s);
end;

Автор: <Spawn> 3.3.2004, 05:18
Цитата(x77 @ 2.3.2004, 15:05)
самый нормальный вариант предложил Maverick smile.gif а у тебя возможны, хотя и маловероятны, повторы. есть ещё один "железобетонный" вариант. можно вызывать CreateClassId, т.е. получать идентификатор GUID, который якобы уникален во вселенный
[/CODE]

Ну не совсем уникальный smile.gif Если книга не врет и я правильно помню, то если генерить 100 000(или милион) GUID-ов в секунду, то за время существования вселенной, вероятность составляет 5%, что оно повторится

Автор: NiJazz 3.3.2004, 07:43
Лучше нумеровать файлы с одним именем. Правильно заметил Bodya.

Автор: x77 3.3.2004, 14:15
<Spawn>, думаю, по условию задачи, можно этими процентами смело пренебречь smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)