当前位置: 首页 > 知识库问答 >
问题:

当一个文件已经被系统中的其他用户打开时,我该如何打开它?

郎祯
2023-03-14
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。当我使用render方法创建这个文件时,它是在系统内部的某个地方打开的。这就是为什么当我尝试使用Filestream fs=new Filestream(path,fileMode.open,fileaccess.read)手动打开它时

它抛出文件,另一个进程正在使用文件的异常。请指导我该怎么做。

我已经在代码中使用了fileshare.readwrite属性和file.openread(路径),但它对我不起作用。

共有1个答案

马宜民
2023-03-14

您泄漏了一个应该处理的流对象。具体地说,这里作为第二个参数传递的那个:

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);
}
 类似资料:
  • 问题内容: 考虑这两个python程序: : : 运行。在运行时,启动。两者都将愉快地运行,但是如果当前通过打开文件,则会输出一个空字符串。 我期望会引发异常,告诉我该文件已经打开,但是没有发生,而是文件看起来是空的。为什么会这样?检查它是否已被另一个进程打开的正确方法是什么?可以简单地检查是否返回了空字符串,然后重试直到读取其他内容,或者还有其他更Python化的方法吗? 问题答案: 有关在Py

  • 当我试图打开一个特定的文件夹时,我有一个问题,我有这个代码来打开我的文件夹。 该代码只打开最近的文件夹,在那里我可以在我的图库中看到我的所有照片,而不打开特定的文件夹 我正在用API 26进行测试

  • 我有一个电子应用程序,可以在单独的选项卡中编辑多个文件,比如Atom或VS代码。当通过对话框打开文件时,或者当应用程序未运行(通过解析argv)时,通过“打开方式”打开文件时,此功能可以正常工作。 然而,我不知道如何将通过“打开”打开的文件“添加”到已经运行的应用程序——默认情况下,会创建该应用程序的第二个新实例。我希望能够以某种方式将文件的路径传递给原始应用实例。 我浏览了文档,发现唯一有希望的

  • 当另一个手风琴打开时,我必须关闭手风琴。我一次只能显示一个手风琴打开。目前,手风琴允许您一次打开多个面板。如果我打开一个选项卡,然后打开另一个选项卡,两个选项卡将同时打开。我只能显示一个。你能帮我吗?

  • 当Android在多次模式尝试后被锁定时,它会要求您使用您的谷歌帐户登录以解锁,我有我的用户名和密码,但移动数据和无线未启用,我无法启用,因为它已完全锁定,我不想进行出厂重置,因为我会丢失数据。 作为一名程序员,我浪费了两天的时间来搜索如何,我找到了使用ADB打开wifi的答案: 但是,如果禁用USB调试,它将不起作用,是否有任何其他解决方案可以在使用ADB时启用USB调试或获取wifi或移动数据

  • 我有下面的代码,我过去经常点击特定的按钮来显示或隐藏内容,它成功地工作了,但这不仅仅是我想要的,而且当一个内容显示时,我想要的也不可能是另一个打开,这意味着如果我显示其中一个内容并试图显示另一个内容,第二个内容将导致第一个内容显示自动崩溃,但我失败了,我怎么能做到呢。 我的代码