openFileDialog.ShowDialog를 이용한 파일 기 및 쓰기 테스트 입니다.

데이터베이스에 파일 저장하기

바이너리로 만들어서 데이터베이스에 저장합니다.

데이터베이스 필드형식은 varbinary 설정합니다.

			//저장될 스트림입니다.
            MemoryStream TempMemoryStream = null;
               
            if (this.openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) //Test_Doc.docx 파일 선택
            {
                Int32 reads = 0;

                FormFileName = System.IO.Path.GetFileName(openFileDialog1.FileName);
                using (Stream st = openFileDialog1.OpenFile())
                using (MemoryStream output = new MemoryStream())
                {
                    st.Position = 0;
                    Byte[] buffer = new Byte[256];

                    while (0 < (reads = st.Read(buffer, 0, buffer.Length)))
                    {
                        output.Write(buffer, 0, reads);
                    }
                    TempMemoryStream = output;
                    output.Flush();

                } //using end 

 

데이터베이스에서 불러오기

				//System.Data.Linq.Binary 형식의 데이터
                System.Data.Linq.Binary binaryFile = item.FormFile; 
                byte[] fileResult = binaryFile.ToArray();
                using (FileStream stream = new FileStream(@"D:\Test_Doc.docx", FileMode.Create))
                {
                    Byte[] bytes = fileResult.ToArray();

                    stream.Write(bytes, 0, bytes.Length);

 

파일저장하기

                    //파일저장하기
                    using (FileStream stream = new FileStream(@"D:\Test_Doc.docx", FileMode.Create))
                    {
                        Byte[] bytes = output.ToArray();

                        stream.Write(bytes, 0, bytes.Length);
                    }

 

 System.Data.Linq.Binary 형식으로 저장
                Int32 reads = 0;

                //임시 메모리스트림에 작성
                using (Stream st = dlg.OpenFile())
                {
                    using (MemoryStream output = new MemoryStream())
                    {
                        st.Position = 0;
                        Byte[] buffer = new Byte[256];

                        while (0 < (reads = st.Read(buffer, 0, buffer.Length)))
                        {
                            output.Write(buffer, 0, reads);
                        }
                        TempMemoryStream = output;
                        output.Flush();
                    } // in using
                } // out using
Personnel.Photo = new System.Data.Linq.Binary(TempMemoryStream.GetBuffer());

Linq.Binary 데이터 바인딩
        public void UpdatePersonImage()
        {
            Contract.Data.Insa.ParentPerson pp = this.MainContentGrid.DataContext as Contract.Data.Insa.ParentPerson;
            if (pp.Personnel.Photo.Length > 0)
            {
                System.Data.Linq.Binary binaryFile = pp.Personnel.Photo;     //Binary  로 저장된 필드       
       
                using( System.IO.MemoryStream ms = new System.IO.MemoryStream( binaryFile.ToArray()))
                {

                    System.Drawing.Bitmap bm = new System.Drawing.Bitmap(ms);
                    this.imgPerson.Source = GetBitmapSource(bm);
                }

            }
        }

        private System.Windows.Media.Imaging.BitmapSource GetBitmapSource(System.Drawing.Bitmap _image)
        {
            System.Drawing.Bitmap bitmap = _image;
            System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                bitmap.GetHbitmap(),
                IntPtr.Zero,
                Int32Rect.Empty,
                System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
            return bitmapSource;
        }

 

유용한 파일함수

파일이름을 가지고 오고 싶을떄?

Path.GetExtension 메서드
지정된 경로 문자열에서 확장명을 반환합니다.

FormFileName = System.IO.Path.GetFileName(openFileDialog1.FileName);

+ Recent posts