존재하지 않는 폴더의 이름을 얻는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/147925

  •  02-07-2019
  •  | 
  •  

문제

내가 할 수있는 폴더 이름을 포함하는 문자열을 얻는 가장 좋은 방법은 무엇입니까? ~ 아니다 존재하다? 즉, 내가 전화하면 DirectoryInfo.Exists 주어진 경로의 경우 거짓을 반환해야합니다.

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

도움이 되었습니까?

해결책

안내서 후에 이름을 지정하십시오. 불법 인물을 꺼내십시오.

다른 팁

당신이 원하는 방식으로 정확하게 할 수있는 방법은 없습니다. 당신이 그것에 대해 생각한다면, 당신은 DirectoryInfo.Exists 거짓을 반환했으며, 다른 프로그램은 앞으로 나아갈 수 있고 디렉토리를 만들 수있었습니다. 이것은 레이스 조건입니다.

이것을 처리하는 일반적인 방법은 새로운 임시 디렉토리를 만드는 것입니다. 창조가 성공하면 만들기 전에 존재하지 않았다는 것을 알 수 있습니다.

글쎄, 디렉토리를 만들지 않고, 당신이 확신 할 수있는 것은 몇 마이크로 초 전에 존재하지 않았다는 것입니다. 여기에 충분히 가까운 방법이 있습니다.

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

이것은 스레드 레이스에 대해 차단하기위한 디렉토리를 만듭니다 (즉, 다른 프로세스/스레드가 아래에서 디렉토리를 훔치는 스레드).

내가 사용한 것 :

using System.IO;

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

(또한 가이드에서 숯을 제거 할 필요가없는 것 같지 않습니다. 합법적 인 파일 이름을 생성합니다)

글쎄, 한 가지 좋은 내기는 사용자 이름, 오늘의 날짜 및 시간을 밀리 초로 내리는 것과 같은 문자열을 연결하는 것입니다.

그래도 궁금합니다. 왜 이렇게하고 싶습니까? 무엇을 위해해야합니까?

이것이 임시 폴더를 만드는 것입니까? 나는 종종 Guid.NewGuid를 사용하여 아직 존재하지 않는 폴더 이름에 사용할 문자열을 가져옵니다.

나는 당신이 충분히 가까울 수 있다고 생각합니다.

문자열 directoryName = guid.newguid.tosrtring ();

Guid 's는 상당히 무작위이므로 2 Dirs를 동일하게 얻지 않아야합니다.

네임 스페이스 내에서 새로 생성 된 안내서를 사용하여 다소 고유 한 (예 : 응용 프로그램/제품의 이름)가 원하는 것을 얻을 수 있습니다. 예를 들어 다음 코드는 다음과 같습니다 극도로 실패 할 가능성이 낮습니다 :

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top