C#中如何判断目录权限是可写的,还有删除的时候,如何判断文件正在使用?就是想写个程序删除那些可写的文件,但是当有些文件正在使用的时候,跳过那个文件,也就是不删除正在使用的文件,请问在C#中如何判断目录权限是可写的,还有删除的时候,如何判断文件正在使用?

解决方案 »

  1.   

    /// <summary>
            /// 解决删除目录提示:System.IO.IOException: 目录不是空的。
            /// 删除一个目录,先遍历删除其下所有文件和目录(递归)
            /// </summary>
            /// <param name="strPath">路径</param>
            /// <returns>是否已经删除</returns>
            private bool DeleteADirectory(string strPath)
            {
                string[] strTemp;
                try
                {
                    //先删除该目录下的文件
                    strTemp = System.IO.Directory.GetFiles(strPath);
                    foreach (string str in strTemp)
                    {
                        System.IO.File.Delete(str);
                    }
                    //删除子目录,递归
                    strTemp = System.IO.Directory.GetDirectories(strPath);
                    foreach (string str in strTemp)
                    {
                        DeleteADirectory(str);
                    }
                    //删除该目录
                    System.IO.Directory.Delete(strPath);
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "发生错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            } 
      

  2.   

    filestream 等使用文件,dispose等关闭使用
    再删除
    修改文件名是否成功,不成功使用
      

  3.   

    C#有ACL处理的,用那个如何判断呢?
      

  4.   

    判断文件是否正在被使用
    static bool IsFileInUse(String^ fileName)
    {
    bool inUse = true;
    if (System::IO::File::Exists(fileName))
    {
    FileStream^ fs = nullptr;
    try
    {
    fs = gcnew FileStream(fileName, FileMode::Open, FileAccess::Read, FileShare::None);
    inUse = false;
    }
    catch (Exception^ e)
    {
    Console::WriteLine(e->Message->ToString());
    }
    finally
    {
    if (fs != nullptr)
    {
    fs->Close();
    }
    }
    return inUse;           //true表示正在使用,false没有使用
    }
    else
    {
    return false;           //文件不存在则一定没有被使用
    }
    }