确定文件是否可访问

时间:2015-04-11 04:07:48

标签: c#

我想确定一个文件是否可以读取其内容或写入内部,我使用此代码:

public bool Can_access_to_file(string FileIsAccesible_file)
{
    try {
        System.IO.FileStream Stream = new System.IO.FileStream(FileIsAccesible_file, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite);
        Stream.Close();
        return true;
    } catch {
        return false;
    }
}

我对它有一些疑问,似乎不是一个非常好的解决方案,因为它设置文件流,这意味着对于大文件,检查需要很长时间,对吗?

我该怎么做才能改善它?

请提供或解释比我现有代码更好的解决方案。

2 个答案:

答案 0 :(得分:1)

包含在using语句中可确保在完成后正确清理资源(+1 Rufus),但对于您的问题更多,与您尝试检查的文件大小无关,因为您最初只是读取到设置(或默认)缓冲区大小。

由于您只是打开和关闭并且未指定缓冲区大小(因此默认值),因此您只能读取文件的前4096个字节。

如果您不想包含在使用声明中但仍然确保自己清理完毕,请在致电Stream.Dispose()后致电Stream.Close()

答案 1 :(得分:1)

以下是我用来检查是否可以独占打开文件的一些代码:

/// <summary>
/// check whether a file can be accessed
/// --> Warning: No lock is performed, so things may change until you really access the file
/// </summary>
/// <param name="fullFilename">name of the file</param>
/// <returns>true if the fle can be accessed, false in any other case</returns>
public static bool CanOpenExclusive( string fullFilename )
{
    Contract.Requires( false == String.IsNullOrWhiteSpace( fullFilename ), "fullFilename is required but is not given" );

    try
    {
        using ( FileStream stream = File.Open( fullFilename, FileMode.Open, FileAccess.Read, FileShare.None ) )
        {
            return true;
        }
    }
    catch( IOException)
    {
        return false;
    }
}