我正在用C#编写一个需要重复访问1个图像文件的程序.大部分时间它都可以工作,但如果我的计算机运行速度很快,它会在将文件保存回文件系统之前尝试访问该文件并抛出错误:"另一个进程正在使用的文件".
我想找到解决这个问题的方法,但是我所有的谷歌搜索都只是通过使用异常处理来创建检查.这违背了我的宗教信仰,所以我想知道是否有人有更好的方法呢?
有没有办法检查文件是否被锁定而不使用try/catch块?
现在,我所知道的唯一方法就是打开文件并抓住任何文件System.IO.IOException.
这就是我现在这样做的方式.我尝试在FileShare设置为none的情况下打开该文件.所以我想要独占访问该文件.如果我不能得到那么它是一个很好的赌注别人有文件被锁定.
必须有一个更好,更快的方式.有任何想法吗?
try
{
using (FileStream fs = File.Open(GetLockFilename(), FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
fs.Close();
}
// The file is not locked
}
catch (Exception)
{
// The file is locked
}
Run Code Online (Sandbox Code Playgroud) 我试图使用StreamReader读取文件,但它总是被另一个进程使用,所以我收到此错误:
该进程无法访问文件'\ arfjwknasgmed17\C $\FLAG CONDITION\CP-ARFJN-FLAG.XLS',因为它正由另一个进程使用.
有没有办法可以在不复制的情况下阅读本文?或者这是我唯一的选择?
我构建了一个控制台应用程序,用于监视 Windows 2019 Server 上的一组文件夹,并使用相同的文件名将任何新创建的 .txt 文件复制到另一个文件夹。到目前为止,它可以实现基本功能。现在我必须处理这样一个事实:大多数时候,这些文件很大,需要几分钟才能完成创建。我已经浏览了几篇 SO 帖子,并拼凑了以下代码来尝试完成此任务:
using System;
using System.IO;
namespace Folderwatch
{
class Program
{
static void Main(string[] args)
{
string sourcePath = @"C:\Users\me\Documents\SomeFolder";
FileSystemWatcher watcher = new FileSystemWatcher(sourcePath);
watcher.EnableRaisingEvents = true;
watcher.IncludeSubdirectories = true;
watcher.Filter = "*.txt";
// Add event handlers.
watcher.Created += new FileSystemEventHandler(OnCreated);
}
// Define the event handlers.
private static void OnCreated(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is created.
FileInfo file = new FileInfo(e.FullPath);
string …Run Code Online (Sandbox Code Playgroud)