2012-08-05 2 views
2

사용자가 일부 데이터로 채워진 사용자 지정 서식 파일의 파일을 내보낼 수있는 응용 프로그램이 있으며 지금 저장할 위치를 선택할 수 있습니다. 파일이 이미 존재하는 경우 파일을 덮어 쓰거나 기본 설정에 따라 새 이름을 생성합니다.사용자가 폴더 내에 만 저장할 수 있도록 보장

내보내는 폴더/파일 이름과 파일이 존재하는 경우 덮어 쓸지 여부는 사용자가 만들고 저장하는 구성 파일에 저장됩니다. 그러면 그가 수행하는 모든 작업이이 파일을 실행하고 응용 프로그램이 데이터 수집 및이 파일 내보내기를 시작합니다.

그래서 위험한 것은 C 드라이브에 저장하는 설정 파일을 보낼 수 있다는 것입니다. 실행해야하는 모든 파일을 열어 실행하면 C 드라이브에있는 파일을 덮어 쓸 수 있습니다 같은 이름을 지어야한다. 필자가 고려하고있는 것은 사용자가 파일을 저장할 폴더를 선택하게하고이 환경 설정을 구성 파일에 저장하지 않고 사용자 환경 설정으로 저장하므로 구성 파일을 제공하면이 파일은 폴더를 선택하십시오. 설정 파일은 파일 이름을 결정합니다.

유효한 파일 문자를 파일 이름 (\ 문자 제외)으로만 입력하는 것은 쉽지만 파일 이름 대신 하위 폴더와 파일 이름을 입력 할 수 있습니다. config 파일을 사용하여 내 보낸 파일을보다 잘 구성 할 수 있습니다. 하지만 그렇게하면 ..\..\something_important.exe과 같이 입력 할 수 있습니다. 그러면 사용자가 내보내기에 대해 정의한 폴더 외부에 저장됩니다. \sub\subsub\myfile.txt과 같은 경로를 입력 할 수는 있지만, ..\..\myfile.txt과 같은 경로는 입력하지 않아도됩니다. 경로에 ..\ 문자열이 없도록하려면 충분합니까? 그 (것)들을 폴더 나무 높은쪽으로 항해하게 할 수 있던 ..\ 같이 어떤 다른 부호 있는가?

답변

2

사용자가 폴더를 선택할 수 있도록 FolderBrowserDialog을 사용하는 것이 좋습니다. 이것은 사용자가 사용 경험이있는 공통 대화 상자입니다. 사용자가 선택할 수있는 폴더에 대한 추가 규칙이있는 경우 사용자가 폴더를 선택한 후이 유효성 검사를 수행하고 사용자가 루트 폴더를 선택한 경우이를 거부 할 수 있습니다.

FolderBrowserDialog

(FolderBrowserDialog in C#에서 촬영 한 이미지입니다.)

1

이 응용 프로그램이 왜 그렇게 복잡한 지 이해할 수 없지만 항상 KISS 방법을 사용합니다 (Keep It Simple and Stupid). 나는 또한 UI (사용자 인터페이스)가 항상 사용자를 이끌어 그를 위해 선한 일을하도록 인도해야한다고 믿는다.

원하는 폴더에서 열고 새 폴더를 만들고 SaveFileDialog와 같은 텍스트 상자를 만드는 단추가있는 양식을 만드는 것이 좋습니다. 차이점은 사용자가 다른 폴더로 이동할 수 없다는 것입니다. 이 시나리오에서 사용자는 텍스트 상자에 파일 이름 만 쓸 수 있으며 텍스트의 유효성을 검사하여 올바른 이름으로 지정할 수 있습니다. UI가 사용자에게 더 쉬운 방법을 제공 할 것이므로 텍스트에서 경로를 지정할 필요가 없습니다.

이 간단한 형식은 몇 분 안에 프로그램이 될 수 있으며 바위처럼 단단합니다. 도움이 되었기를 바랍니다.

1

난 당신이 마지막 경로

string myRootPath = @"c:\root\subdir\"; 
var newPath = Path.Combine(myRootPath, @"..\..\windows\aaa"); //user enters ..\..\windows\aaa 
var usersPath = Path.GetFullPath(newPath); 

if (!usersPath.StartsWith(myRootPath)) 
    MessageBox.Show("ALERT"); 
을 검증하기 위해 Path.GetFullPath을 사용할 수있을 것 같아요
관련 문제