Как я могу записать байтовый массив в файл, используя SaveFileDialog? - PullRequest
1 голос
/ 28 сентября 2011

В основном у меня есть программа, которая создает массив байтов (вручную вводится через richtextbox, и я хочу иметь возможность создать новый файл и сохранить байты в этом файле с помощью метода SaveFileDialog ().

Код, который я придумал:

byte[] bytes = Encoding.ASCII.GetBytes(richTextBox1.Text);
Stream stream = new MemoryStream(bytes);

SaveFileDialog file = new SaveFileDialog();
file.ShowDialog();

     if (file.FileName != "")
     {
         using (BinaryWriter bw = new BinaryWriter(stream)) 
         {
             bw.Write(bytes); 
         }


     }

Ответы [ 3 ]

4 голосов
/ 28 сентября 2011

Вы говорите, что у вас есть байты, "введенные вручную через richtextbox" - но вы просто получаете значение текста в кодировке ASCII.Если вы ожидали, что (скажем) разберете гекс, то вы будете разочарованы.Не совсем понятно, что вы пытаетесь сделать, но если вы пытаетесь сохранить текст, вам не нужно конвертировать его в байтовый массив самостоятельно.

Далее выв данный момент вы пишете в MemoryStream, поэтому явно не собираетесь сохранять в файл ... если вы действительно хотите это сделать, вам следует вместо этого использовать FileStream (либо созданный напрямую, либо через File.OpenWrite и т. д.),Однако вам не нужно делать всю эту работу самостоятельно ...

Самый простой способ сохранить кучу байтов:

File.WriteAllBytes(file.FileName, bytes);

Самый простой способ сохранить строку::

File.WriteAllText(file.FileName, text); // Optionally specify an encoding too
1 голос
/ 28 сентября 2011

Вы можете сделать это, просто используя метод File.WriteAllText:

    SaveFileDialog file = new SaveFileDialog();
    file.ShowDialog();

    if (file.FileName != "")
    {
        File.WriteAllText(file.FileName, richTextBox1.Text);
    }
0 голосов
/ 28 сентября 2011

Вы должны использовать FileInfo для чтения / записи в файлы.Таким образом, вы можете сделать больше проверок, прежде чем получить к нему доступ.Создайте ByteArray, как вы уже это сделали, чтобы вы могли определить свою кодировку, и вы в безопасности на будущее.Проверьте ответ пользователя с помощью DialogResult, а затем перепроверьте полученный FileName.Пожалуйста, не забывайте, что, возможно, Файл уже существует, и пользователь хочет переопределить или добавить его: -)

        SaveFileDialog file = new SaveFileDialog();
        DialogResult dialogResult = file.ShowDialog();
        if (dialogResult == DialogResult.OK) {
            if (String.IsNullOrEmpty(file.FileName)) {
                //Inform the user
            }
            string path = file.FileName;
            FileInfo fi = new FileInfo(path);

            // Open the stream for writing.
            using (FileStream fs = fi.OpenWrite()) {
                Byte[] info = Encoding.ASCII.GetBytes(richTextBox1.Text);

                // Add some information to the file.
                fs.Write(info, 0, info.Length);
            }


        } else {
            //Inform the user
        }

Дополнительная информация о FileInfo: http://msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx

Дополнительная информацияо методе OpenWrite: http://msdn.microsoft.com/en-us/library/system.io.fileinfo.openwrite.aspx

...