2013-05-31 182 views
1

我有下面的應用程序。爲了讓讀者更容易測試,我稍作修改。我注意到,當我使用擴展名設置文件名時,例如test.txt,txt擴展名被對話框刪除。不過,我希望用戶能夠指定擴展名,更重要的是我希望能夠設置擴展名。在我看來,破解它的一種方法是根據我的擴展名修改過濾器。這是唯一的方法嗎?SaveFileDialog從設置文件名中刪除擴展名

我正在使用VS 2010 Express。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Globalization; 
using System.IO; 
using System.Windows; 
namespace SpeedDating 
{ 
    partial class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      Form form = new Form(); 
      form.WindowState = FormWindowState.Minimized; 
      form.ShowInTaskbar = false; 
      form.TopMost = true; 
      form.Show(); 

      string filename = "test.txt"; 
      string ext = filename.Substring(filename.LastIndexOf('.')); 
      SaveFileDialog dialog = new SaveFileDialog(); 
      dialog.Title = "SpeedDating App"; 
      dialog.RestoreDirectory = true; 
      dialog.CheckFileExists = false; 
      dialog.CheckPathExists = false; 
      dialog.SupportMultiDottedExtensions = true; 
      dialog.AddExtension = false; 
      dialog.Filter = "All files (*.*)|*.*"; 
      dialog.FileName = DateTime.Now.ToString("yyyyMMdd") + ext; 

      DialogResult result = dialog.ShowDialog(); 
      if (result == DialogResult.OK && dialog.FileName != "") 
      { 
       try 
       { 
        FileStream outfs = File.Create(dialog.FileName); 
        FileStream infs = File.Open(filename, FileMode.Open); 
        infs.CopyTo(outfs); 
        infs.Close(); 
        outfs.Close(); 

        MessageBox.Show(form, "Copied file."); 
       } 
       catch (NotSupportedException ex) 
       { 
        MessageBox.Show(form, "Probably removed the original file."); 
       } 
      } 
      else if (result != DialogResult.Cancel) 
      { 
       MessageBox.Show(form, "No path found to write to."); 
      } 

      form.Close(); 
     } 
    } 
} 
+0

我複製了您的代碼,並且僅更改了消息框中對「表單」的引用。這對我來說可以。我總是得到我輸入對話框的確切文件。 – DonBoitnott

+0

不是我認爲它引起任何問題,但是無論如何,「form」對象的目的是什麼?它是空的,什麼都不做。你不需要固定你所知道的MessageBox。 – DonBoitnott

+0

在我的系統上,我發現該對話框遵循用戶在操作系統級別設置的任何內容。如果擴展名在文件瀏覽器中隱藏,那麼它們也會隱藏在對話框中,而相反的情況也是如此。 –

回答

3

,更重要的是我希望能夠設置擴展

您可以設置.DefaultExt().AddExtension().Filter(),和.FilterIndex()屬性:

 string filename = "test.xyz"; 

     SaveFileDialog dialog = new SaveFileDialog(); 
     dialog.Title = "SpeedDating App"; 
     dialog.RestoreDirectory = true; 
     dialog.CheckFileExists = false; 
     dialog.CheckPathExists = false; 
     dialog.SupportMultiDottedExtensions = true; 
     dialog.Filter = "All files (*.*)|*.*"; 

     dialog.DefaultExt = System.IO.Path.GetExtension(filename); 
     if (dialog.DefaultExt.Length > 0) 
     { 
      dialog.AddExtension = true; 
      dialog.Filter = dialog.DefaultExt + " files (*." + dialog.DefaultExt + ")|*." + dialog.DefaultExt + "|" + dialog.Filter; 
      dialog.FilterIndex = 0; 
     } 

     dialog.FileName = DateTime.Now.ToString("yyyyMMdd"); 

     DialogResult result = dialog.ShowDialog(); 
     if (result == DialogResult.OK && dialog.FileName != "") 
     { 
      Console.WriteLine(dialog.FileName); 
     } 

*請注意,如果在文件資源管理器中關閉顯示「文件擴展名」的選項,那麼對話框也將隱藏擴展名... 但是上述設置會將設置的擴展名添加到.FileName()值由對話框返回。

+0

非常感謝! – RobotRock