Как преобразовать массив байтов в исходный файл (чтобы обеспечить загрузку файла) - PullRequest
1 голос
/ 11 июля 2011

Я использую Opendialogbox для чтения файла.Затем файл сохраняется в массиве byte [].

file -> byte [] byte [] -> хранится в SQL AZure в поле varbinary (max).

Вот мой код:

      OpenFileDialog ofd = new OpenFileDialog();
        if ((bool)ofd.ShowDialog())
        {
             FileStream fileStream = ofd.File.OpenRead());

              byte[]  buffer = new byte[fileStream.Length];
               int read = 0;                             
            using (BinaryReader binaryReader = new BinaryReader(fileStream))
            {
                do
                {
                    read = binaryReader.Read(buffer, 0, Convert.ToInt32(fileStream.Length));
                    // Stored the File in byte[] Array buffer
                } while (read > 0);
            }

        }

Теперь я хочу преобразовать этот байтовый массив в исходный файл (например, .doc, .txt, jpeg).я знаю расширение, в котором должен быть конвертирован файл.

SQL AZure ---> byte [] // done byte [] ---> в исходный файл.// Проблема

Пожалуйста, дайте решение для загрузки файла.

Ответы [ 3 ]

1 голос
/ 11 июля 2011

Один из способов - не обязательно лучший - заключается в следующем:

using (MemoryStream ms = new MemoryStream(theBytes)) 
{
    using (FileStream fs = new FileStream(string.Format("C:\\tempfile.{0}", theExtension))) 
    {
        ms.WriteTo(fs);
    }
}
0 голосов
/ 20 июля 2011

Кажется, проблема, которую вы имеете, не имеет ничего общего с сохранением двоичного файла;это скорее основная проблема безопасности.Попробуйте сохранить по пути, по которому у вас есть программный доступ на запись.Например, попробуйте сохранить в папке «Мои документы» вместо C :.Попробуйте использовать перечисление Environment.SpecialFolder следующим образом и добавьте имя файла + расширение.

Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments)

У вас есть несколько других способов обойти этоЭта проблема, в том числе запуск Visual Studio в повышенном режиме (запуск от имени администратора) и / или разрешение «Все» записи на ваш диск C: \.Но я не рекомендовал бы эти методы обязательно;рассмотрите возможность сохранения в папке, где параметры безопасности ниже, чем c: \, например в Мои документы.

0 голосов
/ 15 июля 2011
namespace FileSaveDialogDemo  
{  

public partial class MainPage : UserControl  
{ 
    #region Fields  
    SaveFileDialog dialog= new SaveFileDialog(); 
    #endregion  

    #region Constructors  
    public MainPage()  
    {  
        InitializeComponent();  
        this.dialog = new SaveFileDialog();  
        try 
        {  
            this.dialog.DefaultExt = ".txt";  
            this.dialog.Filter = "Text Files|*.txt|Log Files|*.log|All Files|*.*";  
            this.dialog.FilterIndex = 2;  
        }  
        catch ( Exception ex )  
        {  
            this.tblError.Text = "Error configuring SaveFileDialog: " + ex.Message;  
        }  
    } 
    #endregion  

    private void btnSaveFile_Click( object sender, RoutedEventArgs e )  
    {  
        bool? dialogResult = this.dialog.ShowDialog();  

        if ( dialogResult == true )  
        {  
            try 
            {  
               byte[] fileBytes; // your varbinary file from database
               using (Stream fs = (Stream)dialog.OpenFile())
                {
                fs.Write(fileBytes, 0, fileBytes.Length);
                fs.Close();
                lblMsg.Content = "File successfully saved!";
               }   

            }  
            catch ( Exception ex )  
            {  
                this.tblError.Text = "Error calling service: " + ex.Message; 
            }  
        }  
    }  // End of Function
 }// End of MainPage class

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...