C# System.IO.Directory、System.IO.File文件操作

System.IO.Directory、System.IO.File文件操作

/// <summary>
/// 删除文件
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static bool DeleteFile(string file)
{
    try
    {
        System.IO.File.Delete(file);
        //System.IO.File.Delete(@"C:\Users\Public\DeleteTest\test.txt");
        return true;
    }
    catch (Exception ex)
    {
    }
    return false;
}


/// <summary>
/// 删除文件夹
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static bool DeleteFolder(string path)
{
    try
    {
        if (Directory.Exists(path))
        {
            ///删除文件夹
            System.IO.Directory.Delete(path, true);

            ///创建文件夹
            Directory.CreateDirectory(path);
        }
        return true;
    }
    catch (Exception ex)
    {
    }
    return false;
}

/// <summary>
/// 删除文件夹内所有文件
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static bool DeleteAllFile(string path)
{
    try
    {
        DirectoryInfo dir = new DirectoryInfo(path);
        FileInfo[] files = dir.GetFiles();
        if (files.Count() > 0)
        {
            foreach (var item in files)
            {
                if (!item.ToString().Contains("$") && (!item.ToString().Contains("Boot")))
                {
                    System.IO.File.Delete(dir.ToString() + "\\" + item.ToString());
                }
            }
        }

        return true;
    }
    catch (Exception ex)
    {
    }
    return false;
}

*

using System;
using System.IO;
using System.Linq;
using System.Web;

namespace CoreLibrary
{
    public class FileHelper
    {
        /// <summary>
        /// 创建文件夹路径名称
        /// </summary>
        /// <param name="dir"></param>
        /// <returns></returns>
        public static string CreatDirectoryPath(string path)
        {
            string result = string.Empty;
            try
            {
                string year = DateTime.Now.Year.ToString();
                string month = DateTime.Now.Month.ToString();
                if (month.Length == 1)
                    month = "0" + month;
                result = path + year + "/" + month + "/";
            }
            catch (Exception)
            {
                result = path;
            }
            return result;
        }

        /// <summary>
        /// 创建文件夹
        /// </summary>
        /// <param name="path"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public static bool CreateDirectory(string path, out string message)
        {
            bool IsSuccess = false;
            message = "";
            if (!Directory.Exists(path))
            {
                try
                {
                    Directory.CreateDirectory(path);
                    IsSuccess = true;
                }
                catch (UnauthorizedAccessException)
                {
                    message = "创建目录失败,因为没有足够的权限。";
                }
                catch (PathTooLongException)
                {
                    message = "路径或者文件名超过系统定义的最大长度。";
                }
                catch (DirectoryNotFoundException)
                {
                    message = "保存目录没有找到。";
                }
            }
            else
                IsSuccess = true;
            return IsSuccess;
        }

        /// <summary>
        /// 根据Base64字符串,保存文件
        /// </summary>
        /// <param name="fileBase"></param>
        /// <param name="saveFolder"></param>
        /// <param name="IsApi"></param>
        /// <returns></returns>
        public static FileUploadResult CreateBase64ToImage(string fileBase, string saveFolder, bool IsApi)
        {
            FileUploadResult result = null;
            string savePath = string.Empty;
            string message = string.Empty;
            string fileName = string.Empty;
            if (IsApi)
                savePath = StringPlus.GetWebConfigKey("APIFilePath") + saveFolder;
            else
                savePath = ConstantParamInfo.PhysicalApplicationPath + saveFolder;

            try
            {
                if (CreateDirectory(savePath, out message))
                {
                    string dt = DateTime.Now.ToString("yyyyMMddHHmmss.fff");
                    byte[] file = Convert.FromBase64String(fileBase);

                    fileName = dt + ".jpg";
                    File.WriteAllBytes(savePath + fileName, file);

                    result = new FileUploadResult(saveFolder + fileName);
                }
                else
                {
                    result = new FileUploadResult(-2, message);
                }
            }
            catch (Exception ex)
            {
                result = new FileUploadResult(ex);
            }
            return result;
        }

        /// <summary>
        /// 根据HttpPostedFileBase,保存文件
        /// </summary>
        /// <param name="postedFile"></param>
        /// <param name="saveFolder"></param>
        /// <returns></returns>
        public static FileUploadResult CreatePostedFileToImage(HttpPostedFileBase postedFile, string saveFolder)
        {
            //在网站根目录下创建日志目录
            string savePath = ConstantParamInfo.PhysicalApplicationPath + saveFolder;
            string message = string.Empty;
            FileUploadResult result = null;
            try
            {
                if (CreateDirectory(savePath, out message))
                {
                    string dt = DateTime.Now.ToString("yyyyMMddHHmmss.fff");
                    if (postedFile != null && postedFile.ContentLength > 0)
                    {
                        string fileName = string.Empty;
                        string fileExtension = string.Empty;
                        string filePath = string.Empty;

                        fileName = Path.GetFileName(postedFile.FileName);//文件名称
                        fileExtension = Path.GetExtension(postedFile.FileName).ToLower();//文件的后缀名(小写)
                        filePath = savePath + dt + fileExtension;
                        postedFile.SaveAs(filePath);

                        result = new FileUploadResult(saveFolder + dt + fileExtension);
                    }
                }
                else
                {
                    result = new FileUploadResult(message);
                }
            }
            catch (Exception ex)
            {
                result = new FileUploadResult(ex);
            }
            return result;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static FileUploadResult CreateUploadFile(FileUploadParam data)
        {
            //网站根目录路径设置
            string ApplicationPath = string.Empty;
            if (data.IsApplicationPath)
                ApplicationPath = ConstantParamInfo.PhysicalApplicationPath + data.SaveFolder;
            else
                ApplicationPath = data.CustomApplicationPath + data.SaveFolder;

            string message = string.Empty;
            FileUploadResult result = null;
            try
            {
                if (CreateDirectory(ApplicationPath, out message))
                {
                    string dt = DateTime.Now.ToString("yyyyMMddHHmmss.fff");
                    string fileName = string.Empty;
                    string fileExtension = string.Empty;
                    string saveFilePath = string.Empty;

                    if (data.ResourceType == (int)ResourceTypeEnum.Base64String)
                    {
                        byte[] file = Convert.FromBase64String(data.Base64String);

                        fileName = dt + ".jpg";
                        saveFilePath = data.SaveFolder + fileName;

                        ///保存文件
                        File.WriteAllBytes(ApplicationPath + fileName, file);

                        result = new FileUploadResult(saveFilePath);
                    }
                    else if (data.ResourceType == (int)ResourceTypeEnum.PostedFile)
                    {
                        if (data.PostedFile != null && data.PostedFile.ContentLength > 0)
                        {
                            bool isSuccess = true;

                            fileExtension = Path.GetExtension(data.PostedFile.FileName).ToLower();//文件的后缀名(小写)
                            if (data.FileExtension != null)
                            {
                                if (!data.FileExtension.Contains(fileExtension))
                                    isSuccess = false;
                            }
                            if (isSuccess)
                            {
                                //fileName = Path.GetFileName(data.PostedFile.FileName);//文件名称
                                fileName = dt + fileExtension;
                                saveFilePath = data.SaveFolder + dt + fileExtension;

                                ///保存文件
                                data.PostedFile.SaveAs(ApplicationPath + fileName);

                                result = new FileUploadResult(saveFilePath);
                            }
                            else
                            {
                                result = new FileUploadResult(-2, InformationPrompt.SAVE_FILE_TYPE_ERROR);
                            }
                        }
                    }
                }
                else
                {
                    result = new FileUploadResult(-2, message);
                }
            }
            catch (Exception ex)
            {
                result = new FileUploadResult(ex);
            }
            return result;
        }

        /// <summary>
        /// 根据Base64字符串,保存文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="fileName"></param>
        /// <param name="fileBase"></param>
        /// <param name="mesage"></param>
        /// <returns></returns>
        public static bool CreateBase64ToImage(string path, string fileName, string fileBase, out string mesage)
        {
            bool IsSuccess = false;
            mesage = "";
            if (!Directory.Exists(path))
            {
                try
                {
                    Directory.CreateDirectory(path);
                    IsSuccess = true;
                    mesage = "创建成功。";
                }
                catch (UnauthorizedAccessException)
                {
                    mesage = "创建目录失败,因为没有足够的权限。";
                }
                catch (PathTooLongException)
                {
                    mesage = "路径或者文件名超过系统定义的最大长度。";
                }
                catch (DirectoryNotFoundException)
                {
                    mesage = "保存目录没有找到。";
                }
            }
            else
                IsSuccess = true;

            if (IsSuccess)
            {
                try
                {
                    byte[] file = Convert.FromBase64String(fileBase);
                    File.WriteAllBytes(path + fileName, file);
                }
                catch (Exception ex)
                {
                    mesage = ex.Message;
                }
            }
            return IsSuccess;
        }

        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static bool DeleteFile(string file)
        {
            try
            {
                System.IO.File.Delete(file);
                //System.IO.File.Delete(@"C:\Users\Public\DeleteTest\test.txt");
                return true;
            }
            catch (Exception ex)
            {
            }
            return false;
        }

        /// <summary>
        /// 删除文件夹
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static bool DeleteFolder(string path)
        {
            try
            {
                if (Directory.Exists(path))
                {
                    ///删除文件夹
                    System.IO.Directory.Delete(path, true);

                    ///创建文件夹
                    Directory.CreateDirectory(path);
                }
                return true;
            }
            catch (Exception ex)
            {
            }
            return false;
        }

        /// <summary>
        /// 删除文件夹内所有文件
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public static bool DeleteAllFile(string path)
        {
            try
            {
                DirectoryInfo dir = new DirectoryInfo(path);
                FileInfo[] files = dir.GetFiles();
                if (files.Count() > 0)
                {
                    foreach (var item in files)
                    {
                        if (!item.ToString().Contains("$") && (!item.ToString().Contains("Boot")))
                        {
                            System.IO.File.Delete(dir.ToString() + "\\" + item.ToString());
                        }
                    }
                }

                return true;
            }
            catch (Exception ex)
            {
            }
            return false;
        }
    }

    /// <summary>
    /// 创建文件夹返回结果
    /// </summary>
    public class CreateDirectoryResult
    {
        public int Code { get; set; }

        public string Path { get; set; }

        public string Msg { get; set; }
    }

    /// <summary>
    /// 参数设置
    /// </summary>
    public class FileUploadParam
    {
        public FileUploadParam()
        {
            IsApplicationPath = true;
        }

        /// <summary>
        /// 是否保存至项目根目录
        /// </summary>
        public bool IsApplicationPath { get; set; }

        /// <summary>
        /// 自定义项目根目录
        /// </summary>
        public string CustomApplicationPath { get; set; }

        /// <summary>
        /// 资源类型
        /// </summary>
        public int ResourceType { get; set; }

        /// <summary>
        /// 保存路径:/upload/banner/123.jpg
        /// </summary>
        public string SaveFolder { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public HttpPostedFileBase PostedFile { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public string Base64String { get; set; }

        /// <summary>
        /// 文件后缀
        /// </summary>
        public string[] FileExtension { get; set; }
    }

    /// <summary>
    /// 返回结果
    /// </summary>
    public class FileUploadResult
    {
        public FileUploadResult()
        {
            this.Code = 200;
            this.Msg = "success";
        }

        public FileUploadResult(string resultPath)
            : this()
        {
            this.Path = resultPath;
        }

        public FileUploadResult(int code, string resultPath)
            : this()
        {
            this.Code = code;
            this.Path = resultPath;
        }

        public FileUploadResult(Exception ex)
            : this()
        {
            this.Code = -1;
            this.Path = "";
            this.Msg = ex.Message;
        }

        public int Code { get; set; }

        public string Path { get; set; }

        public string Msg { get; set; }
    }

    /// <summary>
    /// 
    /// </summary>
    public enum ResourceTypeEnum
    {
        /// <summary>
        /// 
        /// </summary>
        None = 0,

        /// <summary>
        /// Base64字符串
        /// </summary>
        Base64String = 1,

        /// <summary>
        /// HttpPostedFileBase
        /// </summary>
        PostedFile = 2,
    }
}

*、FileHelper.cs

using ICSharpCode.SharpZipLib.Checksum;
using ICSharpCode.SharpZipLib.Zip;
using System.IO;
using System.Text;
using Yuebon.Commons.Extend;
using Yuebon.Commons.Log;

namespace Yuebon.Commons.Helpers
{
    /// <summary>
    /// 文件处理帮助类
    /// </summary>
    public class FileHelper
    {

        /// <summary>
        /// 制作压缩包(多个文件压缩到一个压缩包,支持加密、注释)
        /// </summary>
        /// <param name="topDirectoryName">压缩文件目录</param>
        /// <param name="zipedFileName">压缩包文件名</param>
        /// <param name="compresssionLevel">压缩级别 1-9 </param>
        /// <param name="password">密码</param>
        /// <param name="comment">注释</param>
        /// <param name="filetype">文件类型</param>
        public static void ZipFiles(string topDirectoryName, string zipedFileName, int compresssionLevel, string password, string comment, string filetype)
        {
            using (ZipOutputStream zos = new ZipOutputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))
            {
                if (compresssionLevel != 0)
                {
                    zos.SetLevel(compresssionLevel);//设置压缩级别
                }
                if (!string.IsNullOrEmpty(password))
                {
                    zos.Password = password;//设置zip包加密密码
                }
                if (!string.IsNullOrEmpty(comment))
                {
                    zos.SetComment(comment);//设置zip包的注释
                }
                //循环设置目录下所有的*.jpg文件(支持子目录搜索)
                foreach (string file in Directory.GetFiles(topDirectoryName, filetype, SearchOption.AllDirectories))
                {
                    if (File.Exists(file))
                    {
                        FileInfo item = new FileInfo(file);
                        FileStream fs = File.OpenRead(item.FullName);
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
                        ZipEntry entry = new ZipEntry(item.Name);
                        zos.PutNextEntry(entry);
                        zos.Write(buffer, 0, buffer.Length);
                        fs.Close();
                    }
                }
                zos.Close();
            }
        }

        /// <summary>
        /// 压缩多层目录
        /// </summary>
        /// <param name="topDirectoryName">压缩文件目录</param>
        /// <param name="zipedFileName">压缩包文件名</param>
        /// <param name="compresssionLevel">压缩级别 1-9 </param>
        /// <param name="password">密码</param>
        /// <param name="comment">注释</param>
        /// <param name="filetype">文件类型</param>
        public static void ZipFileDirectory(string topDirectoryName, string zipedFileName, int compresssionLevel, string password, string comment, string filetype)
        {
            using (System.IO.FileStream ZipFile = File.Open(zipedFileName, FileMode.OpenOrCreate))
            {
                using (ZipOutputStream zos = new ZipOutputStream(ZipFile))
                {
                    if (compresssionLevel != 0)
                    {
                        zos.SetLevel(compresssionLevel);//设置压缩级别
                    }
                    if (!string.IsNullOrEmpty(password))
                    {
                        zos.Password = password;//设置zip包加密密码
                    }
                    if (!string.IsNullOrEmpty(comment))
                    {
                        zos.SetComment(comment);//设置zip包的注释
                    }
                    ZipSetp(topDirectoryName, zos, "", filetype);
                }
            }
        }

        /// <summary>
        /// 递归遍历目录
        /// </summary>
        /// <param name="strDirectory">The directory.</param>
        /// <param name="s">The ZipOutputStream Object.</param>
        /// <param name="parentPath">The parent path.</param>
        /// <param name="filetype"></param>
        private static void ZipSetp(string strDirectory, ZipOutputStream s, string parentPath, string filetype)
        {
            if (strDirectory[strDirectory.Length - 1] != Path.DirectorySeparatorChar)
            {
                strDirectory += Path.DirectorySeparatorChar;
            }

            Crc32 crc = new Crc32();

            string[] filenames = Directory.GetFileSystemEntries(strDirectory, filetype);
            foreach (string file in filenames)// 遍历所有的文件和目录
            {
                if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
                {
                    string pPath = parentPath;
                    pPath += file.Substring(file.LastIndexOf("\\") + 1);
                    pPath += "\\";
                    ZipSetp(file, s, pPath, filetype);
                }
                else // 否则直接压缩文件
                {
                    //打开压缩文件
                    using (FileStream fs = File.OpenRead(file))
                    {
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
                        string fileName = parentPath + file.Substring(file.LastIndexOf("\\") + 1);
                        ZipEntry entry = new ZipEntry(fileName);
                        entry.DateTime = DateTime.Now;
                        entry.Size = fs.Length;
                        fs.Close();
                        crc.Reset();
                        crc.Update(buffer);
                        entry.Crc = crc.Value;
                        s.PutNextEntry(entry);
                        s.Write(buffer, 0, buffer.Length);
                    }
                }
            }
        }
        #region 读取文件
        /// <summary>
        /// 读文件
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string ReadFile(string path)
        {
            path = path.ToFilePath();
            if (!File.Exists(path))
                return "";
            using (StreamReader stream = new StreamReader(path))
            {
                return stream.ReadToEnd(); // 读取文件
            }
        }

        /// <summary>
        /// 文件是否存在
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static bool Exists(string path)
        {
            if (!File.Exists(path))
                return false;
            else
                return true;
        }
        /// <summary>
        /// 读文件
        /// </summary>
        /// <param name="Path">文件路径</param>
        /// <param name="encode">编码格式</param>
        /// <returns></returns>
        public static string ReadFile(string Path, Encoding encode)
        {
            string s = "";
            if (!File.Exists(Path))
                s = "不存在相应的目录";
            else
            {
                StreamReader f2 = new StreamReader(Path, encode);
                s = f2.ReadToEnd();
                f2.Close();
                f2.Dispose();
            }

            return s;
        }
        #endregion
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="path">文件路径</param>
        /// <param name="fileName">文件名称</param>
        /// <param name="content">文件内容</param>
        /// <param name="appendToLast">是否追加到最后</param>
        public static void WriteFile(string path, string fileName, string content, bool appendToLast = false)
        {
            if (!path.EndsWith("\\"))
            {
                path = path + "\\";
            }
            path = path.ToFilePath();
            if (!Directory.Exists(path))//如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(path);
            }
            using (FileStream stream = File.Open(path + fileName, FileMode.OpenOrCreate, FileAccess.Write))
            {
                byte[] by = Encoding.Default.GetBytes(content);
                if (appendToLast)
                {
                    stream.Position = stream.Length;
                }
                else
                {
                    stream.SetLength(0);
                }
                stream.Write(by, 0, by.Length);
            }
        }

        #region 直接删除指定目录下的所有文件及文件夹(保留目录)
        /// <summary>
        /// 删除指定目录下的所有文件及文件夹(保留目录)
        /// </summary>
        /// <param name="file">文件目录</param>
        public static void DeleteDirectory(string file)
        {
            try
            {
                //判断文件夹是否还存在
                if (Directory.Exists(file))
                {
                    DirectoryInfo fileInfo = new DirectoryInfo(file);
                    //去除文件夹的只读属性
                    fileInfo.Attributes = FileAttributes.Normal & FileAttributes.Directory;
                    foreach (string f in Directory.GetFileSystemEntries(file))
                    {
                        if (File.Exists(f))
                        {
                            //去除文件的只读属性
                            File.SetAttributes(file, FileAttributes.Normal);
                            //如果有子文件删除文件
                            File.Delete(f);
                        }
                        else
                        {
                            //循环递归删除子文件夹
                            DeleteDirectory(f);
                        }
                    }
                    //删除空文件夹
                    Directory.Delete(file);
                }

            }
            catch (Exception ex) // 异常处理
            {
                Log4NetHelper.Error("删除文件异常", ex);
            }
        }

        #endregion



        #region 获取文件的编码类型

        /// <summary>
        /// 获取文件编码
        /// </summary>
        /// <param name="filePath">文件绝对路径</param>
        /// <returns></returns>
        public static Encoding GetEncoding(string filePath)
        {
            return GetEncoding(filePath, Encoding.Default);
        }

        /// <summary>
        /// 获取文件编码
        /// </summary>
        /// <param name="filePath">文件绝对路径</param>
        /// <param name="defaultEncoding">找不到则返回这个默认编码</param>
        /// <returns></returns>
        public static Encoding GetEncoding(string filePath, Encoding defaultEncoding)
        {
            Encoding targetEncoding = defaultEncoding;
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4))
            {
                if (fs != null && fs.Length >= 2)
                {
                    long pos = fs.Position;
                    fs.Position = 0;
                    int[] buffer = new int[4];
                    //long x = fs.Seek(0, SeekOrigin.Begin);
                    //fs.Read(buffer,0,4);
                    buffer[0] = fs.ReadByte();
                    buffer[1] = fs.ReadByte();
                    buffer[2] = fs.ReadByte();
                    buffer[3] = fs.ReadByte();

                    fs.Position = pos;

                    if (buffer[0] == 0xFE && buffer[1] == 0xFF)//UnicodeBe
                    {
                        targetEncoding = Encoding.BigEndianUnicode;
                    }
                    if (buffer[0] == 0xFF && buffer[1] == 0xFE)//Unicode
                    {
                        targetEncoding = Encoding.Unicode;
                    }
                    if (buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)//UTF8
                    {
                        targetEncoding = Encoding.UTF8;
                    }
                }
            }

            return targetEncoding;
        }

        #endregion

    }
}


*
*
*

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值