C# 按名称关闭文件

C# 按名称关闭文件,c#,file,handle,C#,File,Handle,在C语言中,我的代码是间接访问文件。文件在访问内容超出范围后很长时间保持打开状态。我无法直接关闭该文件,因为我没有文件流 问题:我如何: 获取一个文件句柄我的代码已间接打开,以便我可以关闭它? 告诉我的代码是时候关闭文件了。类似于file.dispose或file.close,但我没有以file对象开头 这不是我的代码不工作的问题。它不是关于位图的。阅读问题。我想知道做上述两个选择的一般答案。停止把你的解释投射到问题上,把注意力集中在问题的实质上。为什么不简单地使用using语句呢?您可以将加载

在C语言中,我的代码是间接访问文件。文件在访问内容超出范围后很长时间保持打开状态。我无法直接关闭该文件,因为我没有文件流

问题:我如何: 获取一个文件句柄我的代码已间接打开,以便我可以关闭它? 告诉我的代码是时候关闭文件了。类似于file.dispose或file.close,但我没有以file对象开头

这不是我的代码不工作的问题。它不是关于位图的。阅读问题。我想知道做上述两个选择的一般答案。停止把你的解释投射到问题上,把注意力集中在问题的实质上。

为什么不简单地使用using语句呢?您可以将加载的文件分配给一个变量,自动调用的Dispose方法将卸载原始文件,从而将其解锁。。。例如,如果仍要像上一个问题中那样加载位图文件:

private Bitmap LoadBitmap(string fileName)
{
    using (var bitmap = new Bitmap(fileName))
    {
        return new Bitmap(bitmap);
    }
}
这样做的目的是临时锁定文件,加载到内存中,作为位图返回,然后再次解锁文件。
当然,您仍然需要执行一些空检查,但您知道了。

您尝试过GC.Collect吗?将释放所有资源,假设文件确实不再使用..看起来是一个解决方案:因为,如问题所述,其他对象正在间接打开该文件。我没有文件句柄,我想得到它。所以我试图找到一个一般性的答案,而不是一个特定于某个对象的答案,因为MJWIlls似乎已经成功地将我的问题劫持到了。@JKreft我明白了,你是说其他进程或代码正在打开你无法控制的文件?你想要某种间接关闭文件的方法吗?我无法重写/控制的代码正在这样做,是的,但在我的进程空间中。换句话说,就C而言,它是我应用程序的一部分,但我无法重写间接打开文件的代码。我把名字传给它,它做了一些事情,我需要按名字关闭文件。由于我的应用程序已打开,因此不应存在访问控制问题。垃圾收集器将自动卸载原始文件并从技术上解锁它,当您使用时,GC不会这样做,因此删除您答案的这一部分可能是值得的。解锁是由调用Dispose引起的,而不是由GC引起的。这是对不同问题的具体回答,不是对我问题的回答。我正在寻找一个通用的解决方案。@mjwills你真的试过这个代码吗?因为当返回新的位图时;执行时,将卸载/解锁原始映像,并发送回映像的副本。所以,它的工作原理是这样的@JKreft我希望你有足够的技能来编辑这个答案,使它更通用,并使它加载各种文件,而不仅仅是位图…我不是说代码不工作。我是说部分解释是错误的。在您的代码示例中,GC完全不参与文件的解锁。因此,我建议您在内部进行更改,您可以将加载的文件分配给一个变量,垃圾收集器将自动卸载原始文件并将其解锁。使用“using”将确保“bitmap”被释放,因此文件将被解锁或类似的东西,以明确GC不参与。是的,你确实更改了答案-在写评论和写我的评论后8分钟。这使得你的评论在事后看来更加奇怪。。。