我想确定一个文件是否可以读取其内容或写入内部,我使用此代码:
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;
}
}
我对它有一些疑问,似乎不是一个非常好的解决方案,因为它设置文件流,这意味着对于大文件,检查需要很长时间,对吗?
我该怎么做才能改善它?
请提供或解释比我现有代码更好的解决方案。
答案 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;
}
}