2015-01-28 4 views
3

savefiledialog를 사용하여 파일을 저장하고 있습니다. 이제 이름이 이미 있는지 확인해야합니다.C# SaveFileDialog

존재하는 경우 사용자는 이름을 변경하거나 이미 존재하는 파일을 덮어 쓸 필요가 있습니다.

나는 모든 것을 시도해 보았지만 많은 검색을했지만 기술적으로 쉬운 일이라고 생각하는 동안 해결책을 찾지 못했습니다. if (File.Exists(Convert.ToString(infor)) == true)에서 확인이 이루어져야합니다.

이 이 OverwritePrompt

MSDN 링크를 찾을 수

SaveFileDialog sfd = new SaveFileDialog{ Filter = ".xlsx Files (*.xlsx)|*.xlsx", 
             OverwritePrompt = true }; 
:

SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = ".xlsx Files (*.xlsx)|*.xlsx"; 
if (sfd.ShowDialog() == DialogResult.OK) 
{ 
    string path = Path.GetDirectoryName(sfd.FileName); 
    string filename = Path.GetFileNameWithoutExtension(sfd.FileName); 

    for (int i = 0; i < toSave.Count; i++) 
    { 
     FileInfo infor = new FileInfo(path + @"\" + filename + "_" + exportlist[i].name + ".xlsx"); 
     if (File.Exists(Convert.ToString(infor)) == true) 
     { 

     } 
     toSave[i].SaveAs(infor); 
     MessageBox.Show("Succesvol opgeslagen als: " + infor); 
    } 
} 
+3

if 문에서 다음과 같은 이유만으로는 안됩니다. if (infor.Exists) ...? 나는 당신의 질문에 답하고 있지 않다는 것을 알고 있습니다. 코드에 대한 단지 관찰입니다 ... – LexyStardust

+0

또한'== true'는 중복됩니다. –

답변

3

대신 당신이

+0

나는이 파일을 만들었지 만 파일을 덮어 쓸 것이라는 메시지를받지 못했습니다. – EfhK

5

그냥 SaveFileDialogOverwritePrompt 속성을 사용하기위한 작업을 수행해야합니다

SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = ".xlsx Files (*.xlsx)|*.xlsx"; 
sfd.OverwritePrompt = true; 

이렇게 here.

+1

덮어 쓴 것에 고마워하지만 이제는 사용자가 다른 이름을 채우거나 덮어 쓸지 선택할 수 없습니다. – EfhK

+1

덮어 쓰기 프롬프트에서 "아니요"를 클릭하면 다시 대화 상자로 돌아가서 다시 시도해야합니다. – IronMan84

+0

사용자가 존재하지 않는 파일을 선택했지만 코드가 쓰려고 시도 할 때 파일이 존재하는 상황을 유발할 수있는 경쟁 조건을 인식하려면 아래의 @roryap에 대한 응답을 참조하십시오. – eFloh

0

나는이 같은 접근 방식 사용한다 : 외부 뭔가를 쓰고 File.Exists 실제로 사이에 파일을 생성 할 수 있기 때문에 File.Exists을 사용하는 대신 예외를 잡기

SaveFileDialog sfd = new SaveFileDialog(); 
sfd.Filter = ".xlsx Files (*.xlsx)|*.xlsx"; 

do 
{ 
    if (sfd.ShowDialog() == DialogResult.OK) 
    { 
     string path = Path.GetDirectoryName(sfd.FileName); 
     string filename = Path.GetFileNameWithoutExtension(sfd.FileName); 

     try 
     { 
      toSave[i].SaveAs(infor); 
      break; 
     } 
     catch (System.IO.IOException) 
     { 
      //inform user file exists or that there was another issue saving to that file name and that they'll need to pick another one. 
     } 
    } 
} while (true); 

MessageBox.Show("Succesvol opgeslagen als: " + infor); 

따라서, 정말 할 수있는 유일한 방법입니다 어쨌든 당신이 처리해야 할 예외를 던집니다.

이 코드는 파일이 성공적으로 작성 될 때까지 반복하고 사용자에게 메시지를 표시합니다.

+0

File.Exists와 실제로 파일을 쓰려고하는 순간의 경쟁 조건을 언급하는 것이 좋습니다. 이 문제를 해결할 수있는 다른 방법은 없지만 파일을 열려고합니다. 이것은 설계에 의한 것이 아니라 알고리즘 이론에 의한 것입니다. :) – eFloh