我正在用C#编写一个需要重复访问1个图像文件的程序.大部分时间它都可以工作,但如果我的计算机运行速度很快,它会在将文件保存回文件系统之前尝试访问该文件并抛出错误:"另一个进程正在使用的文件".
我想找到解决这个问题的方法,但是我所有的谷歌搜索都只是通过使用异常处理来创建检查.这违背了我的宗教信仰,所以我想知道是否有人有更好的方法呢?
我已经看到了几个关于使用Handle或Process Monitor的答案,但我希望能够在我自己的代码(C#)中找到哪个进程正在锁定文件.
我有一种令人讨厌的感觉,我将不得不在win32 API中徘徊,但如果有人已经这样做并且可以让我走上正轨,我真的很感激帮助.
我需要锁定一个文件以便用Python编写.它将同时从多个Python进程访问.我在网上找到了一些解决方案,但大多数都失败了,因为它们通常只基于Unix或基于Windows.
在Windows Server 2012 R2系统上,Kotlin程序用于FileChannel.tryLock()保存文件的独占锁定,如下所示:
val fileRw = RandomAccessFile(file, "rw")
fileRw.channel.tryLock()
Run Code Online (Sandbox Code Playgroud)
有了这个锁,我无法打开文件:
以编程方式使用C#,对于任何值FileShare:
using (var fileStream = new FileStream(processIdPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var textReader = new StreamReader(fileStream))
{
textReader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)从命令行,type命令:
C:\some-directory>type file.txt
The process cannot access the file because another process has locked a portion of the file.
Run Code Online (Sandbox Code Playgroud)Internet Explorer(是的,我很绝望)
我可以用记事本打开它.
记者怎么能打开一个锁定的文件,没有别的可以吗?
我在tomcat 7中使用管理器应用程序,我无法完全取消部署应用程序.
它说
FAIL - Unable to delete [F:\apache-tomcat-7.0.33\webapps\balaji]. The continued presence of this file may cause problems.
我读到它的某处是因为一些称为内存泄漏的现象,如果我们修复它,问题就会得到解决.
任何人都可以告诉我tomcat 7中的内存泄漏是什么,我们如何解决?我正在使用Windows 7操作系统.如果我能够解决它,我的非部署和重新部署过程将顺利进行吗?
我正在寻找一种方法来删除使用C#被另一个进程锁定的文件.我怀疑该方法必须能够找到哪个进程正在锁定文件(可能是通过跟踪句柄,虽然我不知道如何在C#中执行此操作)然后在能够使用完成文件删除之前关闭该进程File.Delete().
我正在监视由服务器程序写入的文本文件.每次更改文件时,内容都将输出到我的程序中的窗口.
问题是我无法使用Streamreader文件used by another process.建立一个Filestream与ReadWrite将没有任何好处,因为我无法控制所使用的文件的过程.
我可以在记事本中打开文件.即使服务器正在使用它,也必须能够访问它.
这有什么好办法吗?
我应该做以下事情吗?
每当服务器更改文件时,我都需要在文件中获取文本.
我试图删除一个文件,我有两个,一个稍微改变,所以我可以删除旧文件,并用我更改的新文件替换它.当我尝试删除该文件时,我收到错误消息"正在使用的文件",其中表示该操作无法完成,因为该文件是在Java(TM)Platform SE二进制文件中打开的.
我怎么关闭它?
Mac OS X上是否有用于管理文件锁定的flock命令?
我有一个进程,它会被cron相当频繁地调用,以读取其中包含某些与移动相关的命令的文件.我的进程需要读取和写入此数据文件 - 并将其锁定以防止其他进程在此期间触摸它.用户可以执行完全独立的过程(可能)写入/附加到该相同的数据文件.我希望这两个进程运行良好,并且一次只访问一个文件.
nio FileLock似乎是我需要的(没有编写我自己的信号量类型文件),但是我无法将其锁定以供阅读.我可以锁定并写入正常,但在读取时尝试创建锁定时会出现NonWritableChannelException.甚至可以锁定文件进行阅读吗?看起来像RandomAccessFile更接近我的需要,但我不知道如何实现它.
这是失败的代码:
FileInputStream fin = new FileInputStream(f);
FileLock fl = fin.getChannel().tryLock();
if(fl != null)
{
System.out.println("Locked File");
BufferedReader in = new BufferedReader(new InputStreamReader(fin));
System.out.println(in.readLine());
...
Run Code Online (Sandbox Code Playgroud)
FileLock行抛出异常.
java.nio.channels.NonWritableChannelException
at sun.nio.ch.FileChannelImpl.tryLock(Unknown Source)
at java.nio.channels.FileChannel.tryLock(Unknown Source)
at Mover.run(Mover.java:74)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
它说,看看JavaDocs
尝试写入最初未打开以进行写入的通道时,抛出未经检查的异常.
但我不一定要写信给它.当我尝试创建FileOutpuStream等用于写入目的时,我很高兴,直到我尝试在同一文件上打开FileInputStream.
file-locking ×10
c# ×4
file-io ×3
file ×2
java ×2
.net ×1
file-access ×1
filehandle ×1
filelock ×1
locking ×1
macos ×1
memory-leaks ×1
notepad ×1
python ×1
shell ×1
tomcat ×1
tomcat7 ×1
undeploy ×1
windows ×1