在使用该文件后尝试删除该文件,使用 Visual Basic

如何解决在使用该文件后尝试删除该文件,使用 Visual Basic

我正在开发一个程序,该程序可以从程序窗口的屏幕截图中创建一个 PDF 文件。这是我的程序的布局/用户界面:

enter image description here

基本上对于我的程序,我正在截取您在上面看到的 UI 的屏幕截图,将其另存为 Jpg 文件,然后将该 Jpg 文件转换为 PDF。

一旦程序成功将 Jpg 转换为 PDF,我希望程序删除 Jpg,留下 PDF 文件。 问题是由 IOexception 按钮点击事件引起的 2) Create PDF 错误引起的:

进程无法访问文件“C:\Users\Aliza\OneDrive\Desktop\test14\notebook_3412312.jpg”,因为它正被另一个进程使用。'

我应该注意到该程序成功地制作了我想要的 PDF,但我只希望程序在从该 Jpg 文件中创建一个 PDF 后删除该 Jpeg 文件。

这是我在 2) Create PDF 事件中的代码:

    Dim filename As String
    Dim collectionPeriod As String
    Dim fileLocation As String
    filename = CompNam.Text
    If filename = "" Then
        MessageBox.Show("Enter name of your file")
        End
    End If
    collectionPeriod = collectPeriod.Text
    If collectionPeriod = "" Then
        MessageBox.Show("Enter name of your collection period")
        End
    End If

    fileLocation = folderBrowseBox.Text

    GetFormImage(True).Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg",ImageFormat.Jpeg)

    ' Create new pdf document and page
    Dim doc As New PdfDocument()
    Dim oPage As New PdfPage()

    ' Add the page to the pdf document and add the captured image to it
    doc.Pages.Add(oPage)
    Dim img As XImage = XImage.FromFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")

    'Create XImage object from file.
    Using xImg = PdfSharp.Drawing.XImage.FromFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
        'Resize page Width and Height to fit image size.
        oPage.Width = xImg.PixelWidth * 72 / xImg.HorizontalResolution
        oPage.Height = xImg.PixelHeight * 72 / xImg.HorizontalResolution

        'Draw current image file to page.
        Dim xgr = PdfSharp.Drawing.XGraphics.FromPdfPage(oPage)
        xgr.DrawImage(xImg,oPage.Width,oPage.Height)
    End Using

    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)

    doc.Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".pdf")

    My.Computer.FileSystem.DeleteFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
    img.Dispose()

错误发生在您从上面看到的第 2 行到最后一行代码(以 My.Computer.FileSystem... 开头)。再次,任何帮助将不胜感激!

编辑:@ jmcilhinney 这是我根据您的建议尝试添加的代码:

    Dim filePath As String
    filePath = fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg"

    Using img As XImage = XImage.FromFile(filePath)
        img.Dispose()
    End Using

    My.Computer.FileSystem.DeleteFile(filePath)

我知道您说过不要在 Dispose() 语句中放入 Using 调用,但是我很难在 Using 语句之间放入什么。再次感谢您在帮助我时对我非常耐心。

解决方法

看起来这两行应该是相反的:

My.Computer.FileSystem.DeleteFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")

img.Dispose()

如果 img 是从您尝试使用 ImageImage.FromFile 删除的文件创建的 New Bitmap 对象,则该文件将被锁定,直到 {{1 }} 对象被释放。理想情况下,您可以使用 Image 语句创建 Image,然后删除块外的文件,例如

Using
,

所以这个问题的解决方法很简单。在与朋友讨论之后,我们所要做的就是在声明 TempPath 变量时创建一个 filePath

    Dim filePath As String
    filePath = System.IO.Path.GetTempPath & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg"

之前的问题是,我们使用 fileLocation 变量中的文本保存 Jpeg 文件时,不断出现“进程正在被另一个进程使用”错误。

使用 Using 块被证明是不必要的。恰恰相反,它实际上带来的弊大于利。这是新的、改进的代码:

    fileLocation = folderBrowseBox.Text

    Dim filePath As String
    filePath = System.IO.Path.GetTempPath & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg"

    GetFormImage(True).Save(filePath,ImageFormat.Jpeg)

    ' Create new pdf document and page
    Dim doc As New PdfDocument()
    Dim oPage As New PdfPage()

    ' Add the page to the pdf document and add the captured image to it
    doc.Pages.Add(oPage)

    'Create XImage object from file.
    Dim xgr = XGraphics.FromPdfPage(oPage)
    Dim xImg = XImage.FromFile(filePath)

    oPage.Width = xImg.PixelWidth * 72 / xImg.HorizontalResolution
    oPage.Height = xImg.PixelHeight * 72 / xImg.HorizontalResolution

    xgr.DrawImage(xImg,oPage.Width,oPage.Height)

    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)

    doc.Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".pdf")

    doc.Close()

    xImg.Dispose()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res