2009-12-01 4 views
1

파일 내용을 데이터베이스에 저장하는 winforms 앱이 있습니다. 저장된 파일은 모든 유형의 파일 (단어, 엑셀, PDF, 텍스트, 이미지 등) 일 수 있습니다. 사용자가로드 할 파일 유형을 선택할 수 있습니다.바이트 [] 또는 스트림에서 파일 표시

사용자는 데이터베이스를 쿼리하고 파일을 찾은 다음 열 수 있습니다.

바이트 배열을 스트림 또는 바이트 배열로 추출하는 데 문제가 없습니다.

이상적으로는 파일을 바이트 배열이나 스트림에서 직접 표시 할 수 있습니다. 순간 나는 임시 파일로 저장하고있어 다음에 그 열기 :

Process.Start(fileName); 

어떻게 바이트 배열 또는 스트림 파일의에서 하나 연결된 응용 프로그램으로 파일을 표시 할 수 있습니까?

답변

3

Windows에서 유일한 옵션은 수행중인 작업을 수행하는 것입니다. 아웃룩, 인터넷 익스플로러, 파이어 폭스,이 모든 것을 수행

+1

을 (당신이 특정 파일 유형 등 사용자 정의 뷰어를 제공하고자하지 않는 한) 어쨌든, 아마도 가장 쉬운 방법입니다 당신이 무슨 일을하는지 생각하는 것, 이것이 아니라 선택권. – Jochen

+0

글쎄요, 이것이 나에게 가장 쉬운 옵션 인 컨센서스로 보입니다. 이미 코딩되어 실행 중입니다. 유일한 단점은 남은 임시 파일입니다. 사용자가 시작한 애플리케이션을 내 것보다 오래 열어 둘 수 있기 때문에 앱에서 삭제할 수 없습니다. – baralong

+0

임시 파일로 저장한다고하면 파일을 표준 Windows 임시 디렉토리에 저장한다는 의미입니까? 나는 그것을 위해 GetTempPath (http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx)를 사용한다. 그 방법은, 창문은 결국 파일을 청소에 대한 책임을 질 것입니다 (결국) –

0

아마 당신은 Memory Mapped File에서 조금 연구하고 싶을 것입니다.

0

당신이 그것을 포함하고있는 디렉토리를 열려고 시도 할 수 있지만 지금 당장하고있는 것과 똑같은 일을 할 것입니다 .. 관련된 앱이 OS에 의해 알려진다면 문제가되지 않습니다.

0

바이트 스트림과 함께 파일 이름을 DB에 저장하는 경우 확장명에서 파일 형식을 결정할 수 있습니다. 이 경우 두 가지 옵션이 있습니다.

  1. 사용할 응용 프로그램을 결정하기 위해 레지스트리를 사용하십시오. 이에 대한 자세한 내용은 bytes.com에서이 대화를 살펴보십시오.
  2. P/Invoke SHGetFileInfo을 사용하여 사용할 응용 프로그램을 결정하십시오.

NB : 당신은 여전히로드하기 위해 디스크에 임시 파일에 파일 데이터를 작성해야 두 옵션으로.

개인적으로, 나는 동의

관련 문제