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);
'C#.NET IO' 카테고리의 다른 글
[System.Data.Linq.Binary / SaveFileDialog ] 파일 저장하기 (0) | 2010.08.03 |
---|---|
구조체와 클래스를 파일로 입력 및 출력 (0) | 2010.01.03 |
디렉토리생성시 중복디렉토리 네임 방지 (0) | 2010.01.03 |
[ DriveInfo ] 하드 디스크 정보 및 사용량을 알고 싶을때 (0) | 2010.01.03 |
파일 중복체크해서 저장하기 (0) | 2009.12.15 |
[Serialize] 클래스 파일로 저장하기 및 불러오기 (0) | 2009.12.15 |
[ MSDN ] 하드 디스크 정보 및 사용량을 알고 싶을때 (0) | 2009.12.15 |
응용 프로그램의 현재 작업 디렉터리를 가져오기 (0) | 2009.04.27 |