C#: 如何检查文件是否未锁定且可写

13
我想在开始替换文件之前检查文件列表是否正在使用或无法写入。我知道在文件检查和文件复制之间的时间内,有可能会有一个或多个文件被其他人锁定,但我会处理这些异常情况。我想在文件复制之前运行此测试,因为完整的文件列表比操作中间的某个文件失败更有机会成功替换。
你们有没有示例或提示可以指导我?

1
如何在C中检查文件锁 - TheVillageIdiot
4个回答

10

在任何时候,您获得的列表不能保证下一秒钟会保持不变,因为其他人可能会在您回到他们之前控制文件。

我看到一种方法 - 通过获取相应的FileStream对象来“锁定”要替换的文件。这样,您可以确保已通过打开它们锁定了所有“可用”文件,然后可以按照您想要的方式替换它们。

public void TestGivenFiles(List<string> listFiles)
{
  List<FileStream> replaceAbleFileStreams = GetFileStreams(listFiles);


    Console.WriteLine("files Received = " + replaceAbleFileStreams.Count);
    foreach (FileStream fileStream in replaceAbleFileStreams)
    {
        // Replace the files the way you want to.
        fileStream.Close();
    }
}

public List<FileStream> GetFileStreams(List<string> listFilesToReplace)
{
    List<FileStream> replaceableFiles = new List<FileStream>();
    foreach (string sFileLocation in listFilesToReplace)
    {
        FileAttributes fileAttributes = File.GetAttributes(sFileLocation);
        if ((fileAttributes & FileAttributes.ReadOnly) != FileAttributes.ReadOnly)
        { // Make sure that the file is NOT read-only
            try
            {
                FileStream currentWriteableFile = File.OpenWrite(sFileLocation);
                replaceableFiles.Add(currentWriteableFile);
            }
            catch 
            {
                Console.WriteLine("Could not get Stream for '" + sFileLocation+ "'. Possibly in use");
            }
        }
    }
    return replaceableFiles;
}

话虽如此,你最好尝试逐个替换它们,并忽略那些你无法替换的。


0

为了测试这个,你必须打开每个文件进行写入操作。



-5

读一个字节,写一个相同的字节?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接