2008-09-29 5 views
3

내가 확신 할 수있는 폴더 이름을 포함하는 문자열을 얻는 가장 좋은 방법은 이 아니고이 있습니까? 즉, 지정된 경로에 DirectoryInfo.Exists을 호출하면 false가 반환됩니다.존재하지 않는 폴더의 이름을 얻는 가장 좋은 방법은 무엇입니까?

EDIT : 오류 검사기에 대한 테스트를 작성하고 오류 검사기가 경로가 존재하는지 테스트하므로 존재하지 않는 경로를 얻는 가장 좋은 방법에 대해 큰소리로 궁금해했습니다.

+0

어떤 임의의 이름을 원하십니까? 임시 폴더 용? 그렇지 않으면 나는 당신이 원하는 것을 얻지 못한다 : – OregonGhost

답변

9

GUID 뒤에 이라는 이름을 지정하면 잘못된 문자를 제거하기 만하면됩니다.

+0

guid에 잘못된 문자가 포함되어 있습니까? 나는 단지 한 번 보았고 그 것처럼 보이지 않습니다. – robertkroll

0

글쎄, 하나의 좋은 방법은 사용자 이름, 오늘 날짜 및 시간 (밀리 초)까지 문자열을 연결하는 것입니다.

나는 궁금한데 왜 이것을하고 싶습니까? 그것은 무엇을 위해 있어야 하는가?

5

글쎄, 디렉토리를 만들지 않고 몇 마이크로 초 전에 존재하지 않았 음을 확신 할 수 있습니다. 이 스레드 인종에 대해 차단하는 디렉토리 (당신 아래에서 디렉토리를 훔치는 즉 다른 프로세스/스레드)를 생성하는

 string path = Path.GetTempFileName(); 
     File.Delete(path); 
     Directory.CreateDirectory(path); 

참고 : 여기에 충분히 근접 할 수있는 한 가지 방법입니다.

+0

이것은 임시 폴더의 경로를 얻는다. 그러나 krolley가 지속될 어떤 것을 원한다면, 이것은 작동하지 않을 것이다. –

+0

사실이지만 더 많은 문맥이 없으면 이것이 좋은지 나쁜지 알기가 어렵습니다.사실, jop의 Guid 제안이 마음에 든다. openid를 고칠 수 있다면 나는 "up"할 것이다 .-p –

+0

AFAIK, Windows에서는 이제 단일 원자 트랜잭션으로 여러 작업을 래핑하는 방법이있다. 따라서 절대적인 대답은 없습니다. 우리가 가진 것은 모두 '좋은 답변'입니다. – jop

6

정말로 원하는 방식으로 정확하게 수행 할 방법이 없습니다. 생각해 보면 DirectoryInfo.Exists에 대한 호출이 false를 반환 한 후에도 다른 프로그램이 디렉토리를 만들었을 가능성이 있습니다. 이는 경쟁 조건입니다.

정상적인 방법은 새 임시 디렉토리를 만드는 것입니다. 생성이 성공하면 작성하기 전에 존재하지 않았 음을 알 수 있습니다.

0

임시 폴더 또는 다른 것을 만드시겠습니까? 나는 Guid.NewGuid를 사용하여 확실히 존재하지 않는 폴더 이름에 사용할 문자열을 얻습니다.

0

나는 당신이 충분히 가까이 될 수 있다고 생각 :

문자열이 DirectoryName = Guid.NewGuid.ToSrtring();

Guid는 상당히 임의적이므로 동일한 2 개의 dir을 가져 오면 안됩니다.

+0

사람들이 빠르다! – mattlant

+0

은 이러한 빠르고 쉬운 질문에 답하는 봇이 있는지 궁금하게 생각합니다. :) – jop

+0

* jpt는 jop이 실제로 bot라고 생각합니다.;) – mattlant

0

약간 고유 한 네임 스페이스 (예 : 응용 프로그램/제품 이름)에서 새로 생성 된 GUID를 사용하면 원하는 것을 얻을 수 있습니다. 예를 들어, 다음 코드는 실패 매우 않을 수 있습니다 : 당신이에서 문자를 제거 할 필요가 같은

using System.IO; 

string path = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); 

(또한,이하지 않는 것 : 내가 사용 결국 무엇

string ParentPath = System.IO.Path.Combine(Environment.GetEnvironmentVariable("TEMP"), "MyAppName"); 
string UniquePath = System.IO.Path.Combine(ParentPath, Guid.NewGuid().ToString()); 
System.IO.Directory.CreateDirectory(UniquePath); 
4

guid - 그들은 법적인 파일 이름을 생성합니다)

관련 문제