2016-01-26 38 views
1

在我的表單中我有這樣的:如何用我的按鈕實現SaveFileDialog?

private void button_Click_C_Open(object sender, EventArgs e) 
{ 
     Stream myStream = null; 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

     openFileDialog1.InitialDirectory = "c:\\"; 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
     openFileDialog1.FilterIndex = 2; 
     openFileDialog1.RestoreDirectory = true; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       if ((myStream = openFileDialog1.OpenFile()) != null) 
       { 
        using (myStream) 
        { 

         filein = openFileDialog1.FileName; 
         fileout = "D://Download/Scuola/C++/Visual Studio/genericFileName.txt"; //crea un file e ci mette la roba criptata 
         textFileScelto.Text = filein; 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 
} 

我想知道兩件事情,我不知道該怎麼辦呢?

  1. 爲FILEOUT,我怎麼帶啓動SaveFileDialog而不是手動輸入程序中的位置(否:fileout = "D: // downloads/School/C++/Visual Studio/genericFileName.txt")?

  2. 如何確保fileout與filein的格式相同? (例如,如果我選擇file.exe作爲一個文件,輸出必須已經.exe,我將不得不選擇名稱)。

在此先感謝,我對任何語法錯誤表示歉意。我希望我能很好地理解您的答案。

編輯: 我解決了我的第一個問題(0.1),但現在出來了另一個問題:

private void button_Click_C_Open(object sender, EventArgs e) 
    { 
     Stream myStream = null; 
     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

     //openFileDialog1.InitialDirectory = "c:\\"; 
     openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
     openFileDialog1.FilterIndex = 2; 
     openFileDialog1.RestoreDirectory = true; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       if ((myStream = openFileDialog1.OpenFile()) != null) 
       { 
        using (myStream) 
        { 
         filein = openFileDialog1.FileName; //file in lo scegliamo dal openfiledialog 
         textFileScelto.Text = filein; //visualizza la scelta in una textbox 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 
    } 

    private void Encypt_File_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Stream my1Stream; 
      SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

      saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
      saveFileDialog1.FilterIndex = 2; 
      saveFileDialog1.RestoreDirectory = true; 

      if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       if ((my1Stream = saveFileDialog1.OpenFile()) != null) 
       { 
        fileout = saveFileDialog1.FileName; 
        passwordBytes = GetPasswordBytes(); 
        AES.EncryptFile(filein, fileout, passwordBytes); 
        MessageBox.Show("File Criptato!"); 
        my1Stream.Close(); 
       } 
      } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

現在,當我輸入文件名保存,它給了我一個錯誤:進程無法訪問文件(目錄+ fileout的名稱)因爲它正在被另一個進程使用。 :(爲什麼?

回答

1

1)SaveFileDialog(使用大致相同的方式打開文件對話框)

2)只安裝了SaveFileDialog選項來強制推廣。您也可以在用戶退出對話框後自行驗證和/或強制執行擴展。

+0

Ty,但對於第二個請求,不可能讀取filein格式並自動將fileout保存爲filein格式? – Ermess

+1

您可以使用Path.GetExtension(openFileDialog1.FileName)來獲取選定文件的擴展名,並在SaveFileDialog中使用它。也許我沒有得到你想要在這裏實現的目標......嘗試打開一個文件並將其保存在另一個新文件中,同時確保擴展名保持不變? – SuperOli

+0

我明白了,但現在我有另一個問題(看編輯) – Ermess