Home > Mobile >  How to save files in specific locations without showing SaveDialog's Prompt
How to save files in specific locations without showing SaveDialog's Prompt

Time:09-17

I'm been wondering is there a way to save a file in specific's folder in C#?

The only method that I know is 'SaveFileDialog' but the problems is I want to save files

in folder without showing saveFilesDialog's Box.

saveFilesDialog's Box : is a box that prompts you to Click 'YES' or 'CANCEL'.

Code samples

-In form1

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

    
}

Expect Result [1]: https://i.stack.imgur.com/9JqWO.png

Anyone can help me? I kinda stuck rn :)

This is my full code it's hard to read but you'll get the point

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

                        }
                    }
                    
                }

            }
           
            
        }

     
    }

this code's work pretty well!! but i need to click 'OK' everytime!! so is there anyway to save file without click 'OK' everytime!!

CodePudding user response:

Conceptually the only thing SaveFileDialog is doing, if you merely click OK when it shows, is changing the file extension*. Use Path.ChangeExtension instead

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

The wav will be saved alongside the mp3. If you want to save it elsewhere, use Path.Combine to build a new path e.g.

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

*I say this because giving it a filter of *.WAV and a filename xxx without the mp3 extension will cause it to give you a filename of xxx.wav when you only click OK, thus xxx.mp3 -> xxx.wav

  • Related