문제

내 웹 사이트에서 이미지와 썸네일을 저장하기 위해 임의의 폴더 이름을 만들고 싶습니다. 그러나 생성 된 안내의 정식 버전을 사용하는 대신, 처음 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')에 삽입;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top