2016-05-26 15 views
1
PD4ML pd4ml = new PD4ML(); 
pd4ml.enableTableBreaks(true); 
pd4ml.PageInsets = new System.Drawing.Rectangle(5, 5, 5, 5); 
pd4ml.PageSize = PD4Constants.getSizeByName("LETTER"); 
Byte[] byteArray = Encoding.ASCII.GetBytes(content); 
MemoryStream stream = new MemoryStream(byteArray); 

FinalPath = FinalPath + @"\" + VersionID; 
     if (!Directory.Exists(FinalPath)) 
      Directory.CreateDirectory(FinalPath); 

string FileName = FinalPath +FileName+ ".pdf"; 

pd4ml.render(stream,new System.IO.FileStream(FileName, System.IO.FileMode.CreateNew));   
stream.Flush(); 
stream.Close(); 
stream.Dispose(); 

//In another method I'm opening this file 
File stream fs = File.Open(path, FileMode.Open, FileAccess.Read);` 

私はpd4ml.render()メソッドを使用してPDFを生成しています。レンダリングメソッドを使用してこのファイルを作成すると、システムのどこかで内部的に開かれます。それで、Filestream fs = new Filestream(path、FileMode.Open、FileAccess.Read)を使用してmannualyをオープンしようとしたときです。ファイルがすでにシステム内の他のユーザーによって開かれている場合、ファイルを開くにはどうすればよいですか?

ファイルがスローされ、別のプロセスでファイルの例外が使用されています。どうしたらいいか教えてください。

私は既にコードでFileShare.ReadWrite属性とFile.OpenRead(path)を使用していますが、それは私のためには機能しません。

+0

は、あなたが最初にそれを閉じない理由(VARのFS =新しいFileStreamを(パス、FileMode.Open、FileAccess.Read、FileShare.ReadWrite)) –

+0

を使用してみては? – DDave

+0

しかしそれを閉じるには私は最初にそれを開こうとしましたが、開こうとすると例外が出ます。私はFileShare.ReadWriteを使用しましたが、それは私のためには機能しません。 –

答えて

0

を参照してください。具体的には、ここでパラメータとして渡さ1:

pd4ml.render(stream,new System.IO.FileStream(FileName, System.IO.FileMode.CreateNew)); 

ではなく、そのメソッド呼び出しの一部として新しいストリームを作成するには、あなたが別の変数に入れなければならないとDisposeこと(好ましくusingステートメントを使用すること手動ではなくstreamの場合)。

using(var stream2 = new System.IO.FileStream(FileName, System.IO.FileMode.CreateNew)) 
{ 
    pd4ml.render(stream,stream2); 
} 
0

あなたの問題はFile.Createはあなたがファイルを参照するように何をすることができstreamを開くということです。http://msdn.microsoft.com/en-us/library/d62kzs03.aspx

したがって、技術的には、それがすでに使用されています。

File.Createを完全に削除してください。ファイルが存在しない場合、StreamWriterはファイルの作成を処理します。

ストリームを使用している場合、

using (Stream s = new Stream()) 
{ 
} // Stream closes here 
If you also create the output stream, make sure to close it. 

を行うには良い方法ですがあなたが廃棄されなければならないストリームオブジェクトをリークしているhttp://www.codeproject.com/Questions/1097511/Can-not-opening-pdfs-generated-using-pd-ml-using-C

+0

私はpd4mlオブジェクトを使ってファイルを作成しています。 –

+0

クエストで完全なコードを投稿する –

関連する問題