임의의 폴더 이름을 만드는 방법.
-
03-07-2019 - |
문제
내 웹 사이트에서 이미지와 썸네일을 저장하기 위해 임의의 폴더 이름을 만들고 싶습니다. 그러나 생성 된 안내의 정식 버전을 사용하는 대신, 처음 8 자 및 Base64 인코딩 만 사용하는 것에 대해 생각하고있었습니다. 그것. 그래도 충돌 가능성이 걱정됩니다.
누군가가 충분히 좋은 아이디어인지 아닌지에 대해 올바른 방향으로 나를 지적 할 수 있습니까? 이름을 특정 문자로 유지하려면 사용할 수있는 대체 솔루션이 있습니까?
업데이트: 나는 Path.getrandomFilename, Raw Guid를 사용하고 길이가 12 숯이 아니기 때문에 경로에서 멀리하려고 노력하고 있습니다.
해결책
충돌없이 파일을 만들 수있을 때까지 이와 같은 것을 사용하고 루프 라운드를하지 않겠습니까?
const string ValidChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static string GenerateName(Random random, int length)
{
char[] chars = new char[length];
for (int i=0; i < length; i++)
{
chars[i] = ValidChars[random.Next(ValidChars.Length)];
}
return new string(chars);
}
RNG를 통과시키는 이유는 정적 RNG (SchredSafe가 아닌)를 사용하지 않고 메소드 (빠른 연속으로 호출 될 때 복제)에서 새로운 RNG를 생성하는 일반적인 문제를 피하기 때문입니다.
대안은 단일 정적 판독 rng를 갖고 내에서 통화를 일련의 통화하는 것입니다. GenerateName
잠금으로.
요점은 그 것입니다 어떻게든 무작위 이름을 생성하고 성공할 때까지 임의의 이름을 가진 파일을 계속 만들려고 노력합니다. 이는 매우 빨리 발생할 수 있습니다 (12 chars [AZ 0-9]는 4,738,381,338,321,616,896 가능한 조합을 제공합니다).
다른 팁
system.io.path.getrandomfilename ()
System.io의 경로 클래스를 사용하여 무엇보다도 임의의 파일 및 폴더 이름을 생성 할 수 있습니다.
웹 사이트에 데이터베이스를 사용하는 경우 자동 증가 번호 또는 시퀀스를 사용하여 이미지의 고유 한 파일 이름을 생성 할 수 있습니다.
Oracle을 사용하면 다음과 같이 시퀀스를 만듭니다.
시퀀스 시퀀스 시퀀스 _name minvalue 값 maxvalue 값 값 값으로 값 증분으로 시작하십시오.
시퀀스에서 다음 값을 얻으려면 시퀀스의 다음 값을 사용합니다. 예를 들어
시퀀스 seq_user_id를 만듭니다.
듀얼에서 seq_user_id.nextVal을 선택하십시오.
test_bed (user_id, class_type, room_location) 값 (seq_user_id.nextVal, '수중 바스켓 웨이브', 'rm1205')에 삽입;