gpt4 book ai didi

c# - 如何检查文件当前是否打开或正在写入 .NET?

转载 作者:太空狗 更新时间:2023-10-29 21:04:34 24 4
gpt4 key购买 nike

我正在尝试确定文件当前是否打开或正在使用 C# 写入。我见过类似的 SO 问题,所有问题的解决方案都与我的代码类似,它尝试对文件执行 File.Open。但是当我用下面的代码运行程序,并且我也手动打开文件时,我得到了“文件当前未锁定”的意外结果。有什么想法/建议/我遗漏了什么吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;

namespace TestIfFileAccessed
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\TEMP\testFile.txt";
FileInfo filepath = new FileInfo(path);

if (IsFileLocked(filepath)) {
Console.WriteLine("File is currently locked");
Console.ReadLine();
}
else
{
Console.WriteLine("File is currently NOT locked");
Console.ReadLine();
}
}

public static bool IsFileLocked(FileInfo file)
{
FileStream stream = null;

try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}

//file is not locked
return false;
}
}
}

最佳答案

文本文件通常不会被锁定 - 它们的信息通常会被提取并加载到内存中,因此除非您试图在另一个程序正在加载文件(加载速度非常快)的同一时刻访问它,否则您应该没有任何问题。

来源 - Similar question

编辑:如果它在 word 中打开,那么您将遇到问题,因为 Word 保持流打开。尝试在 Word 中打开文件(如果有的话)并再次运行代码,我相信它应该可以工作。否则,如果您想查看它是否在记事本中打开,则必须扫描系统上当前运行的进程以查找记事本并检查该进程是否打开了该文件。

关于c# - 如何检查文件当前是否打开或正在写入 .NET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com