2

以下のアプリがあります。ここで読者が簡単にテストできるように、少し変更しました。Filename に拡張子 (test.txt など) を設定すると、txt 拡張子がダイアログによって削除されることに気付きました。ただし、ユーザーが拡張子を指定できるようにしたいと考えています。さらに重要なのは、拡張子を設定できるようにしたいということです。私の図でそれをハックする 1 つの方法は、私が持っている拡張機能に基づいてフィルターを変更することです。これが唯一の方法ですか?

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();
        }
    }
}
4

1 に答える 1