【问题标题】:How to save files in specific locations without showing SaveDialog's Prompt如何在不显示 SaveDialog 的提示的情况下将文件保存在特定位置
【发布时间】:2021-09-04 03:22:30
【问题描述】:

我一直想知道有没有办法在 C# 中将文件保存在特定文件夹中?

我知道的唯一方法是“SaveFileDialog”,但问题是我想保存文件

在文件夹中不显示 saveFilesDialog 的框。

saveFilesDialog 的框:是一个提示您单击“是”或“取消”的框。

代码示例

-在表格1中

public Form1()
 {
   InitializeComponent();
 }

private string Path =@"D:\Files";  //locaction i wanna stores all the files in
private int i = 0;
private button1_Click(object sender,EventArgs e) 
{
    i++;
    SaveDialogFile save = new SaveDialogFile();
    if(Save.

    if (save.ShowDialog() != DialogResult.OK)return; //Prompt's Dialog will show


    save.Filter = "File Text(*.txt)|*.txt";
    save.InitialDirectory = Path;
    save.FileName = "txt"+i.ToString();

    //Goal : i want 'save.FileName' store in 'Path' without Click 'OK' or Show Prompt Dialog's box

    
}

预期结果 [1]:https://i.stack.imgur.com/9JqWO.png

有人可以帮助我吗?我有点卡住了 :)

这是我的完整代码,很难阅读,但你会明白的

public partial class convertMp3ToWav : Form
    {
        public convertMp3ToWav()
        {
            InitializeComponent();
        }
        BackgroundWorker bw;
        string withoutEx;
        List<string> song_lists = new List<string>();

        private void button1_Click(object sender, EventArgs e)
        {
            bw = new BackgroundWorker();
            bw.DoWork += (obj, ae) => newThread();
            bw.RunWorkerAsync();
        }
        void newThread()
        {

            Thread th = new Thread
            ((ThreadStart)(() =>
            {
                file();
            }));
            th.SetApartmentState(ApartmentState.STA);
            th.Start();
            th.Join();
        }
        void file()
        {
            
            string path = @"D:\musics\wav";
            Directory.CreateDirectory(path);
            FolderBrowserDialog f = new FolderBrowserDialog();
            f.ShowDialog();
            string[] lists = Directory.GetFiles(f.SelectedPath, "*.*", SearchOption.AllDirectories);
            foreach (string list in lists)
            {
                if (Path.GetExtension(list) == ".mp3")
                {
                    string fn = Path.GetFullPath(list);
                    withoutEx = Path.GetFileNameWithoutExtension(fn);
                    song_lists.Add(fn);
                    Console.WriteLine(withoutEx);

                    SaveFileDialog save = new SaveFileDialog();
                    save.Filter = "Wav FIle (*.wav)|*.wav;";
                    //save.FileName = song_lists[0];
                    save.FileName = withoutEx;
                    save.InitialDirectory = path;


                    if (save.ShowDialog() == DialogResult.OK)
                    {
                        using (Mp3FileReader mp3 = new Mp3FileReader(fn))
                        {
                            using (WaveStream pcm = WaveFormatConversionStream.CreatePcmStream(mp3))
                            {
                                WaveFileWriter.CreateWaveFile(save.FileName, pcm);
                            }

                        }
                    }
                    
                }

            }
           
            
        }

     
    }

这段代码运行良好!!但我每次都需要点击“确定”!! 所以有没有每次都点击“确定”来保存文件!!

【问题讨论】:

  • 你是如何写入文件的?
  • hi@Dai 对不起,解释起来有点复杂,但你能给我代码来解决这个问题吗!
  • A SaveFileDialog 实际上并没有“保存”文件。它只是获取路径和文件名,然后您的代码将文件“保存”到该路径和文件名。您可以将路径和文件名设置为您想要的任何内容,只要它存在即可。因此,从技术上讲,SaveFileDialog 和文件的“实际”保存是两件不同的事情。您目前如何保存文件?
  • @JohnG 你能检查我的代码吗?
  • 不想显得粗鲁,但如果你问如何在不使用 SaveFileDialog 的情况下保存文件,你可能不想玩多线程火

标签: c# winforms file savefiledialog system.io.file


【解决方案1】:

从概念上讲,SaveFileDialog 所做的唯一事情是更改文件扩展名*。请改用Path.ChangeExtension

var pathToSaveWavTo = Path.ChangeExtension(pathToMp3, "wav");

wav 将与 mp3 一起保存。如果您想将其保存在其他地方,请使用Path.Combine 构建一个新路径,例如

pathToSaveWavTo = Path.Combine(@"c:\temp", Path.GetFileName(pathToSaveWavTo));

*我这样说是因为给它一个 *.WAV 过滤器和一个不带 mp3 扩展名的文件名 xxx 会导致它在你只点击 OK 时给你一个文件名 xxx.wav,因此 xxx.mp3 - > xxx.wav

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2012-12-11
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多