C# 创建文件(能够判断创建的文件是否被第三方程序占用)

        利用C#编写软件时,如果用户新创建一个文件,然后对该文件读写不会有任何问题。如果用户想对已有的文件进行覆盖操作,如果该文件被其他第三方软件打开,将不能对该文件进行读写。本文设计以下文件创建方法,可以解决以上问题。

         本文的设计思路如下所示:

 程序如下:

bool fileExistFlag = false;//文件是否存在标志位
fullPath = "";
System.Windows.Forms.SaveFileDialog dialog = new System.Windows.Forms.SaveFileDialog();
dialog.Filter = "Files(*.csv)|*.csv|Files(*.xls)|*.xls";
dialog.OverwritePrompt = false;//关闭系统默认检查
//用户选择或输入文件名
  if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
     if (System.IO.File.Exists(dialog.FileName))//检测文件是否存在
       {
          fileExistFlag = true;//标识文件存在,接下来要进行覆盖操作
        }
     else
       {
          fileExistFlag = false;//标识文件不存在,接下来要进行写新的文件
                    }
     fullPath = dialog.FileName;//获取文件路径和文件名
   }

  if (fullPath != "") 
  {
     FileInfo fi = new FileInfo(fullPath);//创建名xls文件
     fi.Directory.Create();
  }
  else
  {
       //当文件存在过,要判断文件是否被其他程序占用,否则直接读写文件   
      if (fileExistFlag)
      {
          if (FileIsUsed(fi.ToString()))
           {
              System.Windows.MessageBox.Show("要读写的文件被占用!");
            }
          else
          {
              System.Windows.MessageBox.Show("文件创建成功!");
             ///读写新创建的文件
          }
      }
      else
      {
             System.Windows.MessageBox.Show("文件创建成功!");
             ///读写新创建的文件
       }
  }

 以上一段代码用到FileIsUsed()方法,该方法通过读用户新创建的文件夹判断文件是否被其他程序所占用

/// <summary>
        /// 函数功能:判断打开的文件是否被其他程序占用,返回指示文件是否已被其它程序使用的布尔值
        /// </summary>
        /// <param name="fileFullName"></param>
        /// <returns><returns>如果文件已被其它程序使用,则为 true;否则为 false</returns>
        private bool FileIsUsed(string fileFullName)
        {
            bool result = false;
            if (!System.IO.File.Exists(fileFullName))//判断文件是否存在,如果不存在,直接返回 false
            {
                result = false;
            }
           // else//如果文件存在,则继续判断文件是否已被其它程序使用
            {
                //逻辑:尝试执行打开文件的操作,如果文件已经被其它程序使用,则打开失败,抛出异常,根据此类异常可以判断文件是否已被其它程序使用。
                System.IO.FileStream fileStream = null;
                try
                {
                    fileStream = System.IO.File.Open(fileFullName, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None);
                    result = false;
                }
                catch (System.IO.IOException ioEx)
                {
                    result = true;
                }
                catch (System.Exception ex)
                {
                    result = true;
                }
                finally
                {
                    if (fileStream != null)
                    {
                        fileStream.Close();
                    }
                }
            }
            return result;
        }
发布了141 篇原创文章 · 获赞 194 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/kenjianqi1647/article/details/103217667
今日推荐