var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2010年04月19日

    判断文件是否被其它进程使用

    分类:

    函数实现如下:

    [C#]

    /// <summary>

    /// Check if the file is locked.

    /// </summary>

    /// <param name="path">The file to open</param>

    /// <returns>True for file locking</returns>

    private static bool CheckIfFileIsBeingUsed(string path)

    {

        try

        {

           using (File.Open(path, FileMode.Open, FileAccess.Write, FileShare.Read))

           {

           }

           return false;

        }

        catch (IOException)

        {

           return true;

        }

        catch (UnauthorizedAccessException)

        {

           return true;

        }

    }

    注意:

    1.   using的使用

    2.   open file in exclusive mode in C#虽未能解决文本文件(.txt.xml等)的占用探测问题,但提供了一个思考思路:创建两个控制台程序访问同一个文本文件,通过调整File.Open的参数以异常捕捉探测该文件被占用。由于程序中使用了XmlDocument.Save方法,而这个方法调用了FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.Read),经过试验可以发现最关键的参数是FileAccess.Write,必须保持这个参数不变才能捕获相关异常。

     

    使用时如果需要等待文件不被锁住后再被使用,可以这样调用:

    [C#]

    bool FileinUse = true;

     

    while (FileinUse)

    {

        if (CheckIfFileIsBeingUsed(resultCollectionPath))

        {

           //Sleep for 60 seconds, not too short.

           System.Threading.Thread.Sleep(60000);

        }

        else

           FileinUse = false;

    }

    分享到:

    历史上的今天: