C#:检查文件是否未锁定和写入

12 .net c# file

我想在开始替换文件之前检查文件列表是否正在使用或不可写.当然我知道从文件检查和文件复制的时间有可能一个或多个文件将由其他人锁定,但我处理这些异常.我想在文件复制之前运行此测试,因为完整的文件列表比不能替换操作中间的文件更有可能成功.

你们中的任何人都是正确方向的例子或暗示

小智 9

无法保证您在任何时间点获得的列表将在下一秒保持不变,因为当您回到它们时,其他人可能会控制该文件.

我看到了一种方法 - 通过获取相应的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;
}
Run Code Online (Sandbox Code Playgroud)

也就是说,你最好一个接一个地替换它们,而忽略那些你做不到的.


max*_*llb -5

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