2

画像をハードディスクに保存し、その名前をSQLテーブルに保存するテストアプリケーションを設計する初心者です。保存してレコードをナビゲートすることはできますが、画像を削除することはできません。

それは私にエラーを与えます画像の削除中に別のプロセスによって使用されているため、プロセスはファイル 'x'にアクセスできません

コードは次のとおりです。

Private Sub btnDelete_Click(System.Object としての ByVal 送信者、System.EventArgs としての ByVal e) ハンドル btnDelete.Click isProcName = "btnDelete_Click" OBJ = 新しい clsImageStoring

    Try
        Dim result As DialogResult = MessageBox.Show(Me, "Do you really want to delete this Record?", "Query", vbYesNo, vbQuestion)
        If result = Windows.Forms.DialogResult.Yes Then
            iiId = DGV.Rows(iiRowno).Cells(0).Value
            iiImageNo = DGV.Rows(iiRowno).Cells(1).Value
            Dim liTempImageNo As Int64 = 0
            If OBJ.Delete(iiId) Then
                Fillgrid()
                liTempImageNo = DGV.Rows(0).Cells(1).Value
                picEmp.Image.Dispose()

                picEmp.Image = Image.FromFile("D:\EmpImages\" & liTempImageNo & ".jpg")
                'File.Delete("D:\EmpImages\" & iiImageNo & ".jpg")
                FileIO.FileSystem.DeleteFile("D:\EmpImages\" & iiImageNo & ".jpg")
                MessageBox.Show(Me, "Record Deleted Successfully", "Information", vbOKOnly, vbInformation)
            End If
        End If

    Catch ex As Exception
        clsLog.WriteException(ex, isModuleName, isProcName)
    End Try
End Sub

画像と画像ボックスからの画像を破棄し、別の画像を画像ボックスにロードしようとしましたが、Image クラスの From file メソッドを除いて、ファイルを開くためにファイルオブジェクトを使用しませんでした。

どんな助けでも感謝しますありがとう


破棄は機能しませんでした。画像がまだ使用されている画像を破棄するのではなく、その特定の画像を手動で削除しようとすると、ファイルがアプリケーション自体である「 vshost.exe 」によって使用されているというエラーが表示されました。そのため、James から言われたようにファイル ストリームを使用して画像ボックスに画像をロードしましたが、次のコードで画像を削除しようとするとエラーが発生しました。

File.Delete("D:\EmpImages\" & iiImageNo & ".jpg")
File.Delete("D:\EmpImages\" & iiImageNo & ".jpg")

だから私はこれを試しました

FileSystem.Kill("D:\EmpImages\" & iiImageNo & ".jpeg")

そしてそれはうまくいきました。ジェームスと私のために貴重な時間をくれたみんなに感謝します

4

3 に答える 3

6

これについては、次のドキュメントでImage.FromFile説明されています。

イメージが破棄されるまで、ファイルはロックされたままになります。

于 2013-06-20T12:40:47.187 に答える
5

ディスクから画像を削除しようとするまでに、画像ボックスはおそらくまだ画像を解放していません。より信頼性の高い方法は、Streamたとえば、

Using fs As New System.IO.FileStream("file path", IO.FileMode.Open, IO.FileAccess.Read)
    PictureBox1.Image = System.Drawing.Image.FromStream(fs)
End Using

これにより、ファイルに対するあらゆる種類のロックが防止されます。

これは一般的な問題のようです。

于 2013-06-20T12:43:46.733 に答える
2
Dim xx as Image
Using str As Stream = File.OpenRead(Fileloc)
xx = Image.FromStream(str)
End Using
picturebox.Image = xx
于 2015-05-12T12:30:01.237 に答える