[C#] Process.Start를 사용하여 폴더를 엽니 다.

다른 주제를 보았는데 다른 문제가 있습니다. 프로세스가 시작되고 있지만 (작업 관리자에서 본) 폴더가 화면에서 열리지 않습니다. 뭐가 문제 야?

System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");



답변

c:\teste” 폴더 가 존재 하는지 확인 했습니까 ? 그렇지 않으면 탐색기에서 기본 폴더 (내 경우에는 ” C:\Users\[user name]\Documents“)가 표시됩니다.

최신 정보

나는 다음과 같은 변형을 시도했다.

// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");

이 중 어느 것도 (예외를 던지는 것을 제외하고) 컴퓨터에서 작동하지 않으면 문제는 코드가 아니라 환경에 있다고 생각합니다. 이 경우 다음 중 하나 (또는 ​​둘 다)를 시도합니다.

  • 실행 대화 상자를 열고 “explorer.exe”를 입력 한 후 Enter 키를 누르십시오
  • 명령 프롬프트를 열고 “explorer.exe”를 입력 한 후 Enter 키를 누르십시오

답변

완전성을 위해 폴더를 열려면 다음을 사용하십시오.

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

Path.DirectorySeparatorChar폴더를 가리 키도록 FileName으로 끝나는 지 확인하십시오 . (@binki에게 감사합니다.)

이 솔루션은 동사를 나타내지 않으므로 폴더를 열고 항목을 선택하는 데는 작동하지 않습니다.


답변

파일 또는 폴더를 선택하려면 다음을 사용할 수 있습니다.

Process.Start("explorer.exe", "/select, c:\\teste");


답변

@ 기호를 사용하면 백 슬래시를 피할 필요가 없습니다.

@를 제거하거나 \\를 \로 바꿉니다.


답변

이스케이프 처리되지 않은 문자열을 사용할 때는 이중 백 슬래시가 필요하지 않습니다.

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");


답변

System.Diagnostics.Process.Start()과부하 중 하나를 사용해야합니다 . 아주 간단합니다!

실행하려는 프로세스의 파일 이름 ( explorer.exe) 을 저장하지 않으면 시스템은 파일 이름을 유효한 폴더 경로로 인식하고 이미 실행중인 Explorer 프로세스에 연결하려고 시도합니다. 이 경우 폴더가 이미 열려 있으면 탐색기에서 아무 작업도 수행하지 않습니다.

프로세스의 파일 이름을 배치 한 경우 시스템은 프로세스의 새 인스턴스를 실행하여 두 번째 문자열을 매개 변수로 전달합니다. 문자열이 유효한 폴더 인 경우 새로 만든 프로세스에서 열리 며 그렇지 않은 경우 새 프로세스는 아무 작업도 수행하지 않습니다.

어떤 경우에도 유효하지 않은 폴더 경로가 프로세스에 의해 처리되는 방법을 모르겠습니다. 사용 System.IO.Directory.Exists()하기에 충분해야합니다.


답변

ProcessStartInfo 인스턴스를 사용하는 오버로드 된 메소드 버전을 사용하고 ProcessWindowStyle 특성을 적합한 값으로 설정하십시오.