2016-05-31 8 views
-2

以下はコードです。イメージを文字列に変換します。私はmemorystreamとConvert.ToBase64Stringを使用してイメージの文字列を取得します。私はまたmemorystreamオブジェクトを閉じてフリーにしますが、まだエラーが出ます。 プロセスは、別のプロセスによって使用されているため、ファイル 'File Name'にアクセスできません。私のローカルホストにmemorystreamを使用してvb.netの別のプロセスで既に使用されているファイル

Dim obj As New returnresult 
    Dim img As System.Drawing.Image 
    Dim memstream As System.IO.MemoryStream 
    Dim randomcls As New Random 
    Dim strImagePath as string="d:\a.jpg" 
    Try       
     Dim tmpFileName As String = "" 

     tmpFileName = randomcls.Next(1, 10) & System.IO.Path.GetExtension(strImagePath) 

     If System.IO.File.Exists(Server.MapPath("tmp\" & tmpFileName)) Then 
      System.IO.File.Delete(Server.MapPath("tmp\" & tmpFileName)) 
     End If 

     System.IO.File.Copy(strImagePath, Server.MapPath("tmp\" & tmpFileName)) 
     img = System.Drawing.Image.FromFile(Server.MapPath("tmp\" & tmpFileName)) 
     memstream = New System.IO.MemoryStream() 
     img.Save(memstream, System.Drawing.Imaging.ImageFormat.Jpeg) 
     obj.strImage = Convert.ToBase64String(memstream.ToArray) 
     memstream.Close() 
     Return obj 
    Catch ex As Exception 
     Return obj 
    Finally 
     obj = Nothing 
     img = Nothing 
     memstream.Close() 
     memstream = Nothing 
     randomcls = Nothing 
    End Try 

ramdomクラスが同じ番号のファイルを生成して削除する場合。それは私にエラーを与える。

+0

すべての一時ファイル名生成ロジックを['Path.GetTempFileName()'](https://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename v = .110).aspx)。 –

+0

私はこれをどのように使うべきか簡単に説明できますか?私は一時的な場所にコピーしていない場合は、直接同じファイルを変換するためにそのファイルを使用するため。 – vjMarket

+0

作成するファイルが10個だけで済むので、私は一時ファイル名のロジックを使用します。だから使えない。私に他の選択肢を教えてください。 – vjMarket

答えて

0

これを試してください。 .....

obj.strImage = Convert.ToBase64String(System.IO.File.ReadAllBytes(strImagePath)) 

を可能な場合は、このコード....

tmpFileName = randomcls.Next(1, 10) & System.IO.Path.GetExtension(strImagePath) 

If System.IO.File.Exists(Server.MapPath("tmp\" & tmpFileName)) Then 
    System.IO.File.Delete(Server.MapPath("tmp\" & tmpFileName)) 
End If 
System.IO.File.Copy(strImagePath, Server.MapPath("tmp\" & tmpFileName)) 
img = System.Drawing.Image.FromFile(Server.MapPath("tmp\" & tmpFileName)) 
memstream = New System.IO.MemoryStream() 
img.Save(memstream, System.Drawing.Imaging.ImageFormat.Jpeg) 
obj.strImage = Convert.ToBase64String(memstream.ToArray) 
memstream.Close() 
img = Nothing 
memstream.Close() 
memstream = Nothing 

と、以下の記述を削除します。これがあなたに役立つことを願っています。

+0

ありがとうございました。 – vjMarket

関連する問題