public class IoHelper
{
/// <summary>
/// 判断文件是否存在
/// </summary>
/// <param name="fileName">文件路径</param>
/// <returns>是否存在</returns>
public static bool Exists(string fileName)
{
if (fileName == null || fileName.Trim() == "")
{
return false;
}
return File.Exists(fileName);
} /// <summary>
/// 创建文件夹
/// </summary>
/// <param name="dirName">文件夹名</param>
/// <returns></returns>
public static bool CreateDir(string dirName)
{
try
{
if (dirName == null)
throw new Exception("dirName");
if (!Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
return true;
}
catch (Exception er)
{
throw new Exception(er.Message);
}
} /// <summary>
/// 创建文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <returns>创建失败返回false</returns>
public static bool CreateFile(string fileName)
{
try
{
if (File.Exists(fileName)) return false;
var fs = File.Create(fileName);
fs.Close();
fs.Dispose();
}
catch (IOException ioe)
{
throw new IOException(ioe.Message);
} return true;
} /// <summary>
/// 读文件内容,转化为字符类型
/// </summary>
/// <param name="fileName">文件路径</param>
/// <returns></returns>
public static string Read(string fileName)
{
if (!Exists(fileName))
{
return null;
}
//将文件信息读入流中
using (var fs = new FileStream(fileName, FileMode.Open))
{
return new StreamReader(fs).ReadToEnd();
}
} /// <summary>
/// 文件转化为Char[]数组
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static char[] FileRead(string fileName)
{
if (!Exists(fileName))
{
return null;
}
var byData = new byte[];
var charData = new char[];
try
{
var fileStream = new FileStream(fileName, FileMode.Open);
fileStream.Seek(, SeekOrigin.Begin);
fileStream.Read(byData, , );
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
var decoder = Encoding.UTF8.GetDecoder();
decoder.GetChars(byData, , byData.Length, charData, );
return charData;
} /// <summary>
/// 文件转化为byte[]
/// </summary>
/// <param name="fileName">文件路径</param>
/// <returns></returns>
public static byte[] ReadFile(string fileName)
{
FileStream pFileStream = null;
try
{
pFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
var r = new BinaryReader(pFileStream);
//将文件指针设置到文件开
r.BaseStream.Seek(, SeekOrigin.Begin);
var pReadByte = r.ReadBytes((int)r.BaseStream.Length);
return pReadByte;
}
catch (Exception ex)
{
throw new Exception(ex.Message); }
finally
{
if (pFileStream != null) pFileStream.Close();
}
} /// <summary>
/// 将byte写入文件
/// </summary>
/// <param name="pReadByte">字节流</param>
/// <param name="fileName">文件路径</param>
/// <returns></returns>
public static bool WriteFile(byte[] pReadByte, string fileName)
{
FileStream pFileStream = null;
try
{
pFileStream = new FileStream(fileName, FileMode.OpenOrCreate);
pFileStream.Write(pReadByte, , pReadByte.Length);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (pFileStream != null) pFileStream.Close();
}
return true; } public static string ReadLine(string fileName)
{
if (!Exists(fileName))
{
return null;
}
using (var fs = new FileStream(fileName, FileMode.Open))
{
return new StreamReader(fs).ReadLine();
}
} /// <summary>
/// 写文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="content">文件内容</param>
/// <returns></returns>
public static bool Write(string fileName, string content)
{
if (Exists(fileName) || content == null)
{
return false;
}
try
{
//将文件信息读入流中
//初始化System.IO.FileStream类的新实例与指定路径和创建模式
using (var fs = new FileStream(fileName, FileMode.OpenOrCreate))
{
//锁住流
lock (fs)
{
if (!fs.CanWrite)
{
throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
} var buffer = Encoding.Default.GetBytes(content);
fs.Write(buffer, , buffer.Length);
return true;
}
}
}
catch (IOException ioe)
{
throw new Exception(ioe.Message);
} } /// <summary>
/// 写入一行
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="content">内容</param>
/// <returns></returns>
public static bool WriteLine(string fileName, string content)
{
if (string.IsNullOrEmpty(fileName))
throw new ArgumentNullException(fileName);
if (string.IsNullOrEmpty(content))
throw new ArgumentNullException(content);
using (var fs = new FileStream(fileName, FileMode.OpenOrCreate | FileMode.Append))
{
//锁住流
lock (fs)
{
if (!fs.CanWrite)
{
throw new System.Security.SecurityException("文件fileName=" + fileName + "是只读文件不能写入!");
} var sw = new StreamWriter(fs);
sw.WriteLine(content);
sw.Dispose();
sw.Close();
return true;
}
}
} /// <summary>
/// 复制目录
/// </summary>
/// <param name="fromDir">被复制的目录</param>
/// <param name="toDir">复制到的目录</param>
/// <returns></returns>
public static bool CopyDir(DirectoryInfo fromDir, string toDir)
{
return CopyDir(fromDir, toDir, fromDir.FullName);
} /// <summary>
/// 复制目录
/// </summary>
/// <param name="fromDir">被复制的目录</param>
/// <param name="toDir">复制到的目录</param>
/// <returns></returns>
public static bool CopyDir(string fromDir, string toDir)
{
if (fromDir == null || toDir == null)
{
throw new NullReferenceException("参数为空");
} if (fromDir == toDir)
{
throw new Exception("两个目录都是" + fromDir);
} if (!Directory.Exists(fromDir))
{
throw new IOException("目录fromDir=" + fromDir + "不存在");
} var dir = new DirectoryInfo(fromDir);
return CopyDir(dir, toDir, dir.FullName);
} /// <summary>
/// 复制目录
/// </summary>
/// <param name="fromDir">被复制的目录</param>
/// <param name="toDir">复制到的目录</param>
/// <param name="rootDir">被复制的根目录</param>
/// <returns></returns>
private static bool CopyDir(DirectoryInfo fromDir, string toDir, string rootDir)
{
foreach (var f in fromDir.GetFiles())
{
var filePath = toDir + f.FullName.Substring(rootDir.Length);
var newDir = filePath.Substring(, filePath.LastIndexOf("\\", StringComparison.Ordinal));
CreateDir(newDir);
File.Copy(f.FullName, filePath, true);
} foreach (var dir in fromDir.GetDirectories())
{
CopyDir(dir, toDir, rootDir);
} return true;
} /// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName">文件的完整路径</param>
/// <returns></returns>
public static bool DeleteFile(string fileName)
{
try
{
if (!Exists(fileName)) return false;
File.Delete(fileName);
}
catch (IOException ioe)
{
throw new ArgumentNullException(ioe.Message);
} return true;
} public static void DeleteDir(DirectoryInfo dir)
{
if (dir == null)
{
throw new NullReferenceException("目录不存在");
} foreach (var d in dir.GetDirectories())
{
DeleteDir(d);
} foreach (var f in dir.GetFiles())
{
DeleteFile(f.FullName);
} dir.Delete(); } /// <summary>
/// 删除目录
/// </summary>
/// <param name="dir">指定目录</param>
/// <param name="onlyDir">是否只删除目录</param>
/// <returns></returns>
public static bool DeleteDir(string dir, bool onlyDir)
{
if (dir == null || dir.Trim() == "")
{
throw new NullReferenceException("目录dir=" + dir + "不存在");
} if (!Directory.Exists(dir))
{
return false;
} var dirInfo = new DirectoryInfo(dir);
if (dirInfo.GetFiles().Length == && dirInfo.GetDirectories().Length == )
{
Directory.Delete(dir);
return true;
} if (!onlyDir)
{
return false;
}
DeleteDir(dirInfo);
return true;
} /// <summary>
/// 在指定的目录中查找文件
/// </summary>
/// <param name="dir">目录</param>
/// <param name="fileName">文件名</param>
/// <returns></returns>
public static bool FindFile(string dir, string fileName)
{
if (dir == null || dir.Trim() == "" || fileName == null || fileName.Trim() == "" || !Directory.Exists(dir))
{
return false;
} //传入文件路径,获取当前文件对象
var dirInfo = new DirectoryInfo(dir);
return FindFile(dirInfo, fileName); } /// <summary>
/// 返回文件是否存在
/// </summary>
/// <param name="dir"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool FindFile(DirectoryInfo dir, string fileName)
{
foreach (var d in dir.GetDirectories())
{
if (File.Exists(d.FullName + "\\" + fileName))
{
return true;
}
FindFile(d, fileName);
} return false;
} /// <summary>
/// 获取指定文件夹中的所有文件夹名称
/// </summary>
/// <param name="folderPath">路径</param>
/// <returns></returns>
public static List<string> FolderName(string folderPath)
{
var listFolderName = new List<string>();
try
{
var info = new DirectoryInfo(folderPath); listFolderName.AddRange(info.GetDirectories().Select(nextFolder => nextFolder.Name));
}
catch (Exception er)
{
throw new Exception(er.Message);
} return listFolderName; } /// <summary>
/// 获取指定文件夹中的文件名称
/// </summary>
/// <param name="folderPath">路径</param>
/// <returns></returns>
public static List<string> FileName(string folderPath)
{
var listFileName = new List<string>();
try
{
var info = new DirectoryInfo(folderPath); listFileName.AddRange(info.GetFiles().Select(nextFile => nextFile.Name));
}
catch (Exception er)
{
throw new Exception(er.Message);
} return listFileName;
}
}

C#常用的IO操作方法的更多相关文章

  1. 常用的IO流

    常用的IO流 •根据处理数据类型的不同分为:字节流和字符流 •根据数据流向不同分为:输入流和输出流 字节流:字节流以字节(8bit)为单位,能处理所有类型的数据(如图片.avi等). 字节输入流:In ...

  2. JaveScript基础(2)之数据类型转换和常用字符串的操作方法

    1.JaveScript数据类型转换: A.转字符串:通过"+"或toString(); PS:如果都是数值类型,'+'会进行求和运算,否则会做字符串连接: var s=2.5;d ...

  3. JavaScript中的常用的数组操作方法

    JavaScript中的常用的数组操作方法 一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2 ...

  4. Dart 中常用的数组操作方法总结

    这里总结了一些在 Dart 中常用的数组操作方法,以便查阅. 首先,我们准备两组数据,以方便后面使用: List<Map> students = [ { 'name': 'tom', 'a ...

  5. C#File类常用的文件操作方法(创建、移动、删除、复制等)

    File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...

  6. java操作文件常用的 IO流对象

    1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...

  7. C库 - 常用文件IO函数

    #include<stdio.h> 0. 文件打开关闭FILE *fp = fopen("C:\\a.dat","wb+");fclose(fp); ...

  8. C#一些常用的图片操作方法:生成文字图片 合并图片等

    生成文字图片: /// <summary> /// 生成文字图片 /// </summary> /// <param name="text">& ...

  9. Java中常用的日期操作方法

    日常项目当中经常会用到操作日期,抽出时间总结了一下,欢迎和大家多多沟通学习,如有任何改进意见和建议,我的QQ是1243672,欢迎联系哦. /** * 日期操作类 * 开发公司:北京东达悦科技有限公司 ...

随机推荐

  1. php将html转成word文档下载

    <meta charset="utf-8" /> <?php class word{ function start(){ ob_start(); echo '&l ...

  2. Git生成ssh ksy后进行项目管理

    1.首先你要有一个git账号,然后在网站上Create a New Repository,填好名称后就建立了一个仓库,之后即会出现一些仓库的配置信息... 2.然后你要下载一个git客户端,也可以是m ...

  3. HDFS NameNode 设计实现解析

    接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode.DataNode 和 Client.本文首先进一步解析 HDFS NameNode 的设计和 ...

  4. CMS模板引擎:XHtmlAction

    前言: 先说说大伙关心的工作上的事,在上家公司任了一个多月的技术经理后,和公司中止了合作关系. 主要原因在于一开始的待遇没谈的太清楚: 1:没有合同,没有公积金,连社保也没交. 2:工资的30%变成了 ...

  5. Android安全开发之通用签名风险

    Android安全开发之通用签名风险 作者:伊樵.舟海.呆狐@阿里聚安全 1 通用签名风险简介 1.1 Android应用签名机制 阿里聚安全漏洞扫描器有一项检测服务是检测APP的通用签名风险.And ...

  6. 一步步学习javascript基础篇(6):函数表达式之【闭包】

    回顾前面介绍过的三种定义函数方式 1. function sum (num1, num2) { return num1 + num2; }  //函数声明语法定义 2. var sum = funct ...

  7. 使用CSS使内容垂直居中的N中方法。

    使用css+div使页面内容水平居中的方法大家并不陌生,那么如何使内容垂直居中呢? OK,下面进入正题,不如我们使用做高中数学题时经常用的思想:分情况讨论.   1.当待垂直居中的DIV高宽为已知时: ...

  8. java中 用telnet 判断服务器远程端口是否开启

    package net.jweb.common.util; import java.io.BufferedReader; import java.io.BufferedWriter; import j ...

  9. 使用JavaMail创建邮件发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  10. 开发该选择Blocks还是Delegates

    前文:网络上找了很多关于delegation和block的使用场景,发现没有很满意的解释,后来无意中在stablekernel找到了这篇文章,文中作者不仅仅是给出了解决方案,更值得我们深思的是作者独特 ...