簡體   English   中英

C#:檢查文件是否未鎖定和寫入

[英]C#: Check if a file is not locked and writable

我想在開始替換文件之前檢查文件列表是否正在使用或不可寫。 當然我知道從文件檢查和文件復制的時間有可能一個或多個文件將由其他人鎖定,但我處理這些異常。 我想在文件復制之前運行此測試,因為完整的文件列表比不能替換操作中間的文件更有可能成功。

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

無法保證您在任何時間點獲得的列表將在下一秒保持不變,因為當您回到它們時,其他人可能會控制該文件。

我看到了一種方法 - 通過獲取相應的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;
}

也就是說,你最好一個接一個地替換它們,而忽略那些你做不到的。

您必須打開每個文件才能進行測試。

讀一個字節,寫同一個字節?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM