2012-04-04 4 views
0

folderBrowseDialog를 사용하여 프로그램에서 일부 파일을 저장할 위치를 선택할 수 있습니다. 사용자가 응용 프로그램이 조작 할 수없는 경로를 선택할 수있는 문제가 있습니다 (예 : "c : \").C++ cli 여기에서 파일을 만들 수 있는지 확인하십시오. FolderBrowseDialog

내 경로 변경을 제안하는 프로그램을 보았습니다 사용자가 조작 할 수없는 경로를 선택하려고 할 때마다 "내 문서"로 이동하지만 어떻게해야하는지 알 수 없습니다. saveFiledialog가 아닌 folderBrowseDialog를 사용하고 있습니다.

그래서 FileIOPermission을 사용하여 경고 메시지가 나타납니다. 하지만 일부 reasone의 경우 작동하지 않습니다. 여기 내가 작성한 빠른 코드가 있지만 예외는 발생하지 않습니다. FileIOPremission on MSDN

using namespace System::Security::Permissions; 

FileIOPermission^ f2 = gcnew FileIOPermission(FileIOPermissionAccess::Write,"C:\\"); 

try { 
    f2->Demand(); 
} 
catch (System::Security::SecurityException^ s){ 
    MessageBox::Show(s->Message); 
} 

답변

1

당신이 가진 잘못된 트랙에 있습니다. 예, FileIOPermission은 원하는 작업을 수행하지 않습니다.이 클래스는 샌드 박스에서 실행되는 코드를 작성할 수있는 보안 관련 클래스입니다. 브라우저에서 실행되는 코드와 마찬가지로 사용자의 디스크 전체에 파일이 튀어 나오는 것을 막을 수 있습니다. 또는 민감한 파일을 읽는 중입니다. 그건 바닐라 C + +/CLI 응용 프로그램에서 작동하지 않습니다, 그것은 사용자가 일반적으로 추가 제한없이 그녀가 일반적으로 액세스 할 수있는 모든 디렉토리와 파일에 대한 액세스를 제공, 완전히 신뢰에서 실행됩니다. 추가 할 이유가 없습니다.

디스크에 파일을 쓰는 것은 일반적으로 위험한 작업입니다. 많은 일이 잘못 될 수 있습니다. 파일에 액세스하는 다른 많은 프로세스가있는 운영 체제에서 코드를 실행하고 있습니다. 다른 프로세스에서 읽은 파일을 덮어 쓰려고하면 예외가 발생합니다. 디스크가 가득 찰 수 있습니다. 사용자가 액세스 할 수없는 디렉토리 이름을 입력했을 수도 있습니다. 단 하나의 실패 모드 일뿐입니다. IOException을 잡아 사용자에게 알려주십시오.

확실히 제한된 사용자가 익숙한 디렉토리에서 대화 상자를여십시오. 그녀의 Documents 폴더는 그녀의 "home"디렉토리입니다. 선택한 디렉토리에 전체 파일을 덤프하는 것이 확실하지 않은 경우 디렉토리에 다른 파일이 있으면 부드러운 알림을 표시합니다. "Eek, 당신은 무엇을 했습니까!"를 피하십시오. 그녀가 여기서 문서 디렉토리에 갑자기 많은 파일이 있다는 것을 알았을 때 응답. 처음 몇 번. 또한 설명이 포함 된 이름을 부여 할 수있을 때 자신의 하위 폴더를 만드는 것을 주저하지 마십시오. 날짜/시간이있는 이름은 대개 작동합니다.

+0

답변은별로 도움이되지 않습니다. 저는 스크린 샷을 저장하는 간단한 프로그램을 만들려고합니다. 나는이 폴더에 쓸 수있는 권한이 있는지 여부를 어떻게 확인합니까? –

+0

흠, 나는 대답했다. IOException을 잡아라. DirectoryInfo :: GetAccessControl()을 사용하여 임의로 더 복잡하게 만들 수 있습니다. 이는 많은 코드를 추가하지만 앞 부분을 확인할 수없는 다른 이유로 예외를 잡는 것을 막을 수는 없습니다. 대답이 왜 도움이되었는지 이해하려면 해당 코드를 작성해야합니다. –