• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我只吃饭不洗碗
博客园    首页    新随笔    联系   管理    订阅  订阅
c#文件操作简单封装工具类

因为在.net mvc 中 File类命名空间总是冲突,自己封装了一个FileHelper类,今日分享给大家

 

  public static class FileHelper
  {

      /// <summary>
      /// 文件下载
      /// </summary>
      /// <param name="downLoadUrl">下载请求地址</param>
      /// <param name="savePath">保存路径</param>
      /// <param name="fileName">文件名</param>
      /// <param name="fileExtension">文件拓展名</param>
      /// <returns>文件路径</returns>
      public static async Task<string> FileDownLoadAsync(string downLoadUrl, string savePath, string fileName, string fileExtension)
      {
          using (HttpClient client = new HttpClient())
          {
              // 发送GET请求并获取数据
              byte[] fileData = await client.GetByteArrayAsync(downLoadUrl);               
              var filepath = Path.Combine(savePath, fileName);
              File.WriteAllBytes(filepath, fileData);
              return filepath;
          }
      }

      /// <summary>
      /// 根据输入的文件夹路径创建目录路径。
      /// </summary>
      /// <param name="directoryPath">文件夹路径。</param>
      /// <param name="isDelFile">指定是否清除文件夹中的文件(如果文件夹已存在)。</param>
      /// <returns>目录路径。</returns>
      public static string CreateFolder(string directoryPath, bool isDelFile = false)
      {
          if (!Directory.Exists(directoryPath))
          {
              Directory.CreateDirectory(directoryPath);
          }

          if (isDelFile)
          {
              DeleteFolderContents(directoryPath);
          }
          return directoryPath;
      }

      /// <summary>
      /// 删除指定文件夹中的所有文件和子文件夹,但保留文件夹本身。
      /// </summary>
      /// <param name="folderPath">应删除其内容的文件夹路径。</param>
      public static void DeleteFolderContents(string folderPath)
      {
          // 删除文件夹中的所有文件
          foreach (string file in Directory.GetFiles(folderPath))
          {
              try
              {
                  File.Delete(file);
              }
              catch (Exception ex)
              {
                  // 处理删除文件时发生的异常
                  Console.WriteLine($"无法删除文件 '{file}': {ex.Message}");
              }
          }

          // 递归删除文件夹中所有子文件夹的内容
          foreach (string subfolder in Directory.GetDirectories(folderPath))
          {
              try
              {
                  DeleteFolderContents(subfolder);
              }
              catch (Exception ex)
              {
                  // 处理递归删除子文件夹时发生的异常
                  Console.WriteLine($"无法删除文件夹 '{subfolder}': {ex.Message}");
              }
          }
      }


      /// <summary>
      /// 将文件重命名为源文件名+bak+日期,并可选择备份到指定路径。
      /// </summary>
      /// <param name="filePath">要备份的文件路径。</param>
      /// <param name="backupPath">可选参数,备份文件的路径。如果不填,则默认为原路径。</param>
      public static void BackupFile(string filePath, string backupPath = null)
      {
          if (File.Exists(filePath))
          {
              string directory = Path.GetDirectoryName(filePath);
              string fileName = Path.GetFileNameWithoutExtension(filePath);
              string extension = Path.GetExtension(filePath);
              string date = DateTime.Now.ToString("yyyyMMddHHmmss");

              string newFilePath;
              if (string.IsNullOrEmpty(backupPath))
              {
                  newFilePath = Path.Combine(directory, $"{fileName}_bak_{date}{extension}");
              }
              else
              {
                  // 如果备份路径不存在,则创建备份路径
                  if (!Directory.Exists(backupPath))
                  {
                      Directory.CreateDirectory(backupPath);
                  }

                  newFilePath = Path.Combine(backupPath, $"{fileName}_bak_{date}{extension}");
              }

              File.Move(filePath, newFilePath);
              Console.WriteLine($"文件 '{filePath}' 已重命名为 '{newFilePath}'。");
          }
          else
          {
              throw new FileNotFoundException($"文件 '{filePath}' 不存在。");
          }
      }

      /// <summary>
      /// 移动文件从一个位置到另一个位置。
      /// </summary>
      /// <param name="sourceFilePath">源文件的路径。</param>
      /// <param name="destinationFilePath">目标文件的路径(要带名字)。</param>
      public static void MoveFile(string sourceFilePath, string destinationFilePath)
      {
          // 检查源文件是否存在
          if (!File.Exists(sourceFilePath))
          {
              throw new FileNotFoundException("源文件不存在。", sourceFilePath);
          }

          // 移动文件
          File.Move(sourceFilePath, destinationFilePath);
      }
      /// <summary>
      /// 将给定的字节数组保存为指定路径的文件。
      /// </summary>
      /// <param name="bytes">要保存为文件的字节数组。</param>
      /// <param name="saveFileFullPath">要保存文件的完整路径。</param>
      public static void SaveFile(this byte[] bytes, string saveFileFullPath)
      {
          File.WriteAllBytes(saveFileFullPath, bytes);
      }

      /// <summary>
      /// 从指定的源目录创建zip文件。
      /// </summary>
      /// <param name="sourceDirectory">源目录的路径。</param>
      /// <param name="zipFilePath">目标zip文件的路径。</param>
      /// <param name="encoding">字符编码 【设置默认编码为UTF-8】</param>
      public static void CreateZipFile(string sourceDirectory, string zipFilePath, Encoding encoding)
      {
          using (var zip = ZipArchive.Create())
          {
              foreach (var file in Directory.EnumerateFiles(sourceDirectory))
              {
                  zip.AddEntry(Path.GetFileName(file), file);
              }
              var options = new WriterOptions(CompressionType.Deflate)
              {
                  ArchiveEncoding = new ArchiveEncoding
                  {
                      Default = encoding // 设置默认编码为UTF-8
                  },
                  LeaveStreamOpen = false
              };
              zip.SaveTo(zipFilePath, options);
          }
      }


      /// <summary>
      /// 将zip文件解压缩到指定的解压目录。
      /// </summary>
      /// <param name="zipFilePath">要解压缩的zip文件的路径。</param>
      /// <param name="extractionDirectory">解压目录的路径。</param>
      public static void ExtractZipFile(string zipFilePath, string extractionDirectory)
      {
          using (var zip = ZipArchive.Open(zipFilePath))
          {
              foreach (var entry in zip.Entries)
              {
                  entry.WriteToDirectory(extractionDirectory, new ExtractionOptions()
                  {
                      ExtractFullPath = true,
                      Overwrite = true
                  });
              }
          }
      }

      /// <summary>
      /// 将一个文件转换为byte[]
      /// </summary>
      /// <param name="filePath">文件路径</param>
      /// <returns>byte[]</returns>
      public static byte[] FileConvertToByteArray(string filePath)
      {
          if (File.Exists(filePath))
          {
              return File.ReadAllBytes(filePath);
          }
          return null;
      }
  }
FileHelper 实现

 

posted on 2024-02-22 11:10  我只吃饭不洗碗  阅读(67)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3