C#常用的IO操作方法
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操作方法的更多相关文章
- 常用的IO流
常用的IO流 •根据处理数据类型的不同分为:字节流和字符流 •根据数据流向不同分为:输入流和输出流 字节流:字节流以字节(8bit)为单位,能处理所有类型的数据(如图片.avi等). 字节输入流:In ...
- JaveScript基础(2)之数据类型转换和常用字符串的操作方法
1.JaveScript数据类型转换: A.转字符串:通过"+"或toString(); PS:如果都是数值类型,'+'会进行求和运算,否则会做字符串连接: var s=2.5;d ...
- JavaScript中的常用的数组操作方法
JavaScript中的常用的数组操作方法 一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2 ...
- Dart 中常用的数组操作方法总结
这里总结了一些在 Dart 中常用的数组操作方法,以便查阅. 首先,我们准备两组数据,以方便后面使用: List<Map> students = [ { 'name': 'tom', 'a ...
- C#File类常用的文件操作方法(创建、移动、删除、复制等)
File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...
- java操作文件常用的 IO流对象
1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序 ...
- C库 - 常用文件IO函数
#include<stdio.h> 0. 文件打开关闭FILE *fp = fopen("C:\\a.dat","wb+");fclose(fp); ...
- C#一些常用的图片操作方法:生成文字图片 合并图片等
生成文字图片: /// <summary> /// 生成文字图片 /// </summary> /// <param name="text">& ...
- Java中常用的日期操作方法
日常项目当中经常会用到操作日期,抽出时间总结了一下,欢迎和大家多多沟通学习,如有任何改进意见和建议,我的QQ是1243672,欢迎联系哦. /** * 日期操作类 * 开发公司:北京东达悦科技有限公司 ...
随机推荐
- 利用sqlmap进行mysql提权的小方法(win与liunx通用)
文章作者:pt007@vip.sina.com文章来源:https://www.t00ls.net/thread-36196-1-1.html1.连接mysql数据打开一个交互shell:sqlmap ...
- touchstart、touchmove、touchend 实现移动端上的触屏拖拽
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- FAT32 FAT区__FAT表解析
一. FAT 表概述 位置: 紧跟在文件系统的“保留区”之后 : 有两个数据结构完全相同的FAT(FAT,File Allocation Tbale 文件分配表)组成. 作用: FAT表项,描述文件系 ...
- serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...
- 使用JDBC的批处理功能
package cn.itcast.jdbc; import java.sql.Connection; import java.sql.Date; import java.sql.PreparedSt ...
- SQL Server 事件通知(Event notifications)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 事件通知监控DDL(NotifyQue ...
- [搜索引擎]Sphinx的介绍和原理探索
What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...
- MyBatis(增删改查)
1.工程中引入包: mybatis-3.2.7.mysql-connector-java-5.1.22-bin 2.添加配置文件: <?xml version="1.0" e ...
- Linux的原子操作与同步机制
Linux的原子操作与同步机制 .进程1执行完“mov eax, [count]”后,寄存器eax内保存了count的值0.此时,进程2被调度执行,抢占了进程1的CPU的控制权.进程2执行“cou ...
- [已招满,谢谢关注]Sogou招聘C#开发人员,有意者请进
职位名称:c#开发工程师 工作地点:搜狐网络大厦 职责:搜狗商业平台桌面产品 职位要求: 1. 计算机或者相关专业本科或以上学历 2. 精通c#,两年以上实际项目开发经验 3. 熟悉C/S开发架构和设 ...