【发布时间】:2017-09-29 11:08:11
【问题描述】:
我正在尝试在 UWP 环境中运行的应用程序中使用 PDFTron 创建 PDF 文件。我能够成功创建文件。根据用户输入,新创建的文件可能需要重命名或从系统中完全删除。虽然当我尝试访问刚刚创建的文件时,系统会抛出以下异常:
Exception thrown: 'System.IO.IOException' in System.IO.FileSystem.dll The process cannot access the file (filename) because it is being used by another process.
以下部分显示了用于创建文件的内容:
await sdfDoc.SaveAsync(filePath, SDFDocSaveOptions.e_linearized, "%PDF-1.5");
sdfDoc.Dispose();
这是我的删除实现:
var filedelete = Task.Run(() => File.Delete(filePath));
文件的创建是在一个单独的任务上运行的,而删除是在按下按钮时进行的。
我了解异常的性质,但我想知道文件的资源是否在创建文件后从 PDFTron 返回到系统?
任何帮助或指导将不胜感激。
谢谢。
【问题讨论】:
-
1) 您能否展示如何实例化 PDFDoc 对象。你传入一个 StorageFile 吗? 2) 在您对 SaveAsync 的调用中,filePath 是什么文件类型? 3) 是否将 PDFDoc 对象传递给 PDFViewCtrl 进行查看? 4) 为什么重命名/删除正在访问的文件对您很重要?
-
感谢您的回复 Ryan:1)我使用的实例化 - PDFDoc pdfdoc = new PDFDoc();和 SDFDoc sdfDoc = pdfdoc.GetSDFDoc(); 2)我不使用存储文件来访问文件,只有filePath是一个指向当前保存文件的路径的字符串,这个字符串作为参数传递给SaveAsync。 3)创建的PDF没有通过PDFViewCtrl。 4) 用户定义创建的 PDF 的文件名,他们可能需要重命名或删除以防出错。
-
既然你传入的是一个字符串,那么文件路径是在应用自己的存储里面吗?另外,您能否在运行时发布 PDFNet.GetVersion 的输出。
-
确实,文件路径指向应用程序自己的存储内部(在 LocalCache 文件夹中的包文件夹中)。为了让您更好地了解该过程,最初会要求用户提供要创建的文件的名称,然后他使用设备的相机从应用程序中拍照,然后将该图像文件转换为使用 SaveAsync() 的 PDF 文件。为了创建 PDF 文件,用户定义的文件名与指向应用程序的 LocalCache 文件夹的 filePath 字符串一起使用。 PDFNet.GetVersio() 返回:6.71。提前谢谢你。