Что такое генерирование имени файла
Генерация случайного числа, максимально случайного
Добрый день, задался вопросом как получить случайное число, но не псевдо-случайное по идее.
Генерация имени файла при сохр.
Доброго времени, Хочу реализовать в своей программе функцию авто-сохранения отчетов но чтоб.
Генерация случайного числа
Проблемма такова: в программе необходимо получить несколько чисел, от 1 до 255 (или max будет.
Генерация случайного лабиринта
Вообщем требуется сгенерировать лабиринт 12х12 с одним входом и выходом. Лабиринт представляется.
Решение
Генерируются имена, состоящие из строчных буков английского алфавита
Добавлено через 42 секунды
Но уникальность имени не гарантируется.
При компиляции выскакивает ошибка
Ошибка C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Test e:\test\test.cpp 50
К сожалению это не помогло. Но я нашёл несколько иное решение проблеме, вот: Это не совсем решение. Это - отмашка. Типа - "Не учите меня жить!" Да и проблемы в самом деле нет. Просто VS не любит изначальных Си-стандартов и библиотек. И бурчит. Типа - "Если что, я не виноват. Предупреждал" В самом деле функция strcpy действительно опасна в неумелых руках. Но в неумелых руках опасно ВСЕ. Опасно просто жить.Это мне напомнило одну байку (а может и реальную историю) У одной американской домохозяйки любимая кошечка залезла в стиральную машину и с наслаждением улеглась на хозяйском бельишке. Но машинку-то хозяюшка включила, не подозревая ничего. Кошечка, кажется, выжила, но потрепало ее изрядно. А может, и не выжила. Но не будем о страшном. А вот хозяйка неплохо заработала. Она выставила иск производителю стиралок, обосновывая его тем, что в инструкции не было слов "Не позволяйте свое кошке Мусе спать в барабане Изделия."
Идиотизм вообще огромен и непредсказуем.
Генерация случайного числа
Сори за вопрос может уже обсуждался не раз, но всё же возник. Как правильно сгенерировать число от.
Генерация случайного списка
Здравствуйте! Подскажите как сделать что бы по команде программа генерировала случайные списки со.
Генерация случайного числа в заданном пределе с присвоением ему имени в таблице
Здравствуйте, подскажите пожалуйста, кому не сложно. Проблема в том, что нужно сгенерировать.
Генерация случайного числа в заданном пределе с присвоением ему имени в таблице
Здравствуйте, подскажите пожалуйста, кому не сложно. Проблема в том, что нужно сгенерировать.
Ниже представлены примеры генерации уникального имени файла, чтобы исключить возможной перезаписи какого-либо файла новым файлом. В зависимости от сложности проекта можно выбрать подходящий вариант и использовать его на практике.
Самый простой вариант – использовать встроенную в PHP функцию uniqid() :
Более сложный (более близок к уникальности) вариант - использовать uniqid() в сочетании с функцией md5() :
Вместо uniqid() можно использовать другую функцию, например, microtime() . Эта функция возвращает текущую метку времени Unix с микросекундами:
Усложним пример (придадим больше уникальности):
Если необходимо имя короче, чем 32 символа, то можно просто обрезать строку до нужной длины:
Если проект небольшой или даже средний, то вышеуказанные примеры вполне себе годятся для генерации уникальных имён файлов. Но, если проект сложный и очень много файлов загружается, то есть вероятность перезаписи какого-либо файла новым файлом при случайной генерации такого же имени для нового файла. Появляется проблема неконтролируемости уникальности файлов. Иными словами, встаёт необходимость проверки на отсутствие такого же файла. Приведу простой пример. Для удобства я соберу весь код в одном файле:
Здесь осуществляется проверка на существование файла. Если файл с таким именем уже существует, то генерируется следующее имя.
Есть ещё вариант - использовать функцию sha1_file() . Она возвращает хеш - 40-символьное шестнадцатеричное число:
Или с проверкой на отсутствие файла с таким же именем:
Есть ещё вариант - генерировать уникальное имя для файла, при этом в имени будут и директории:
Название файла будет примерно таким: uploads/7ce/824/286eeca87.jpg Причём uploads/7ce/824/ это вложенные директории. В примере указано, что если этих директорий нет, то их необходимо создать.
Ну и наконец как-то посолидней файлы обозвать надо.
Типа
3B54B0B2
3B54AF7D
3B2F1681
39BC5A37
390F9B17
GetTempFileName - я обратил внимание на нее, но она не в тему. Еще и файл в tmp создает. М.б. есть параметры, но лучше с ней здесь не вязаться.
скукотища |
---|
Дмитрий77, "солидное" добавление к YYYYMMDDHHMISS . Set fso = CreateObject("Scripting.FileSystemObject") |
Ничего солидного в Scripting.FileSystemObject не вижу. Неповторяемость можно проверить через Dir если на то пошло.
Akina |
---|
А почему не последовательная нумерация? . |
Потому что настройки проги накроются, а файлы и логи останутся. Он нужен, этот лишний гимор?
HandKot, ваш пример красив (проверил) очень крут, ну т.е. слишком очень.
В общем, накрутил так:
Дмитрий77 |
---|
Ничего солидного в Scripting.FileSystemObject не вижу. |
Ну да ну да, всё, что выше АПИ - ацтой.
А вы прикиньте, что два независимых потока одновременно выяснили, что следующий файл должен называться blablabla120, а на появление самого файла уходит 1-2 сек например от момента принятия решения о его имени.
Вот поэтому и разумно привязываться к миллисекундам и разбавлять случайным числом.
Ну или действит. супер-GUID
А проверка на существование может вообще не помочь в описанной ситуации, не так ли? Поэтому при грамотном алгоритме от нее можно и вовсе отказаться.
И что? в любом случае должна быть обработка ошибок. Ловиш ошибку, что такой файл существует и генериш новое имя. И так
пока не запишется файл или пользователь не нажмет кнопку "Отмена"
Posted via ActualForum NNTP Server 1.4
Дмитрий77 |
---|
как конвертировать тек. время в Штамп Времени в hex |
Гм. а нафига? Просто строковое представление устроит? тогда
Вынуждаете напрягаться панимаешь ли, поиск производить.
Токо эта тема закрыта. Навсегда.
Akina |
---|
Гм. а нафига? Просто строковое представление устроит? тогда. |
Тогда моя ф-ция выше лучше и надежней, и красивше с чем согласитесь конечно.
В прилагаемом проекте Command2 +смотреть в дебаг.
Проблема не в модуле (я к таким API наворотам нормально отношусь), а в том что ваша ф-ция, не дает требуемого результата (т.е. цикл от 1 до 10 выводит одно и то же число, даже если чуть подворотить вашу, то будут повторяющиеся варианты). У меня используется
1) миллисикундная точность
2) добавлена случайность
Это полностью (даже 2 файла за 1мс маловероятно реально) гарантирует неповторимость имен. Ну т.е. мне такая точность более чем. От GUID я отказался, т.к. визуально начала файлов разные, а у меня они как бы автосортированы по имени /времени.
в Python, что такое хороший или лучший способ генерировать случайный текст для добавления к файлу (имени), который я сохраняю на сервере, просто чтобы убедиться, что он не перезаписывается. Спасибо!
каждый вызов tempfile.NamedTemporaryFile() приводит к другому временному файлу, и его имя можно получить с помощью , например:
как только у вас есть уникальное имя файла, его можно использовать как любой обычный файл. Примечание: по умолчанию файл будет удалены когда это закрытый. Однако, если delete параметр False, файл не автоматически удалять.
полный набор параметров:
также можно указать префикс для временного файла (как один из различных параметров, которые могут быть предоставлены во время создания файла):
дополнительные примеры работы с временными файлами можно найти здесь
можно использовать модуль UUID для генерации случайной строки:
это допустимый выбор, учитывая, что UUID генератор крайне маловероятен для создания дубликата идентификатора (имя файла, в этом случае):
только после генерации 1 миллиарда UUID каждую секунду в течение следующих 100 лет вероятность создания только одного дубликата будет около 50%. Вероятность одного дубликата будет около 50%, если каждый человек на Земле владеет 600 миллионами UUIDs.
общим подходом является добавление метки времени в качестве префикса / суффикса к имени файла, чтобы иметь некоторое временное отношение к файлу. Если вам нужно больше уникальности, вы все равно можете добавить к этому случайную строку.
OP запросил создать random имена не случайный файлы. Времена и UUIDs могут столкнуться. Если вы работаете на одной машине (а не на общей файловой системе), и ваш процесс/поток не будет топтать себя, используйте ОС.getpid (), чтобы получить свой собственный PID и использовать его как элемент уникального имени файла. Другие процессы, очевидно, не получат тот же PID. Если вы многопоточны, получите идентификатор потока. Если у вас есть другие аспекты вашего кода, в котором один поток или процесс может генерировать несколько разных tempfiles, вам может потребоваться использовать другой метод. Скользящий индекс может работать (если вы не держите их так долго или используете так много файлов, вы будете беспокоиться о ролловере). В этом случае достаточно сохранить глобальный хэш/индекс для "активных" файлов.
Извините за длинное объяснение, но оно зависит от вашего точного использования.
Если вы хотите сохранить исходное имя файла как часть нового имени файла, уникальные префиксы длины unifom могут быть созданы:
вызовы àdd_prefix ('style.css') генерирует последовательность типа:
Если вам не нужен путь к файлу, но только случайная строка с предопределенной длиной, вы можете использовать что-то вроде этого.
добавление моих двух центов здесь:
согласно документу python для tempfile.mkstemp, он создает временный файл самым безопасным способом. Обратите внимание, что файл будет существовать после этого вызова:
Я лично предпочитаю, чтобы мой текст был не только случайным/уникальным, но и красивым, поэтому мне нравится lib hashids, который генерирует приятный случайный текст из целых чисел. Можно установить через
pip install hashids
фрагмент:
Краткое Описание:
Hashids-это небольшая библиотека с открытым исходным кодом, которая генерирует короткие, уникальные, не последовательные идентификаторы из чисел.
Читайте также: