C# 文件操作类

简介:
复制代码

 
 
using System;
using System.IO;

namespace Utils
{
public class IOHelper
{
public IOHelper();

public static bool CopyDir(DirectoryInfo fromDir, string toDir); // 复制目录
public static bool CopyDir( string fromDir, string toDir); // 复制目录
public static bool CreateDir( string dirName); // 创建目录
public static bool CreateFile( string fileName); // 创建文件
public static void DeleteDir(DirectoryInfo dir); // 删除目录 (如果目录中存在文件就删除)
public static bool DeleteDir( string dir, bool onlyDir); // 删除目录
public static bool DeleteFile( string fileName); // 删除文件
public static bool Exists( string fileName); // 判断文件是否存在
public static bool FindFile(DirectoryInfo dir, string fileName); // 在指定的目录中查找文件
public static bool FindFile( string dir, string fileName); // 在指定的目录中查找文件
public static string Read( string fileName); // 读文件的全部内容
public static string ReadLine( string fileName); // 读第一行数据
public static bool Write( string fileName, string content); // 写入指定的内容

public static bool WriteLine( string fileName, string content); // 写一行数据
}
}

using System;
using System.Text;
using System.IO;
/* ----------------------------------------------------------------
//文件名:IOHelper
//文件功能描述:文件操作类
//
//创建人:陈太汉
//创建日期:2011/05/18

----------------------------------------------------------------
*/
namespace Utils
{
public class IOHelper
{
/// <summary>
/// 判断文件是否存在
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool Exists( string fileName)
{
if (fileName == null || fileName.Trim() == "" )
{
return false ;
}

if (File.Exists(fileName))
{
return true ;
}

return false ;
}


/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="dirName"></param>
/// <returns></returns>
public static bool CreateDir( string dirName)
{
if ( ! Directory.Exists(dirName))
{
Directory.CreateDirectory(dirName);
}
return true ;
}


/// <summary>
/// 创建文件
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool CreateFile( string fileName)
{
if ( ! File.Exists(fileName))
{
FileStream fs
= File.Create(fileName);
fs.Close();
fs.Dispose();
}
return true ;

}


/// <summary>
/// 读文件内容
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static string Read( string fileName)
{
if ( ! Exists(fileName))
{
return null ;
}
// 将文件信息读入流中
using (FileStream fs = new FileStream(fileName, FileMode.Open))
{
return new StreamReader(fs).ReadToEnd();
}
}


public static string ReadLine( string fileName)
{
if ( ! Exists(fileName))
{
return null ;
}
using (FileStream 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 ;
}

// 将文件信息读入流中
using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate))
{
lock (fs) // 锁住流
{
if ( ! fs.CanWrite)
{
throw new System.Security.SecurityException( " 文件fileName= " + fileName + " 是只读文件不能写入! " );
}

byte [] buffer = Encoding.Default.GetBytes(content);
fs.Write(buffer,
0 , buffer.Length);
return true ;
}
}
}


/// <summary>
/// 写入一行
/// </summary>
/// <param name="fileName"> 文件名 </param>
/// <param name="content"> 内容 </param>
/// <returns></returns>
public static bool WriteLine( string fileName, string content)
{
using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate | FileMode.Append))
{
lock (fs)
{
if ( ! fs.CanWrite)
{
throw new System.Security.SecurityException( " 文件fileName= " + fileName + " 是只读文件不能写入! " );
}

StreamWriter sw
= new StreamWriter(fs);
sw.WriteLine(content);
sw.Dispose();
sw.Close();
return true ;
}
}
}


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 + " 不存在 " );
}

DirectoryInfo 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)
{
string filePath = string .Empty;
foreach (FileInfo f in fromDir.GetFiles())
{
filePath
= toDir + f.FullName.Substring(rootDir.Length);
string newDir = filePath.Substring( 0 , filePath.LastIndexOf( " \\ " ));
CreateDir(newDir);
File.Copy(f.FullName, filePath,
true );
}

foreach (DirectoryInfo dir in fromDir.GetDirectories())
{
CopyDir(dir, toDir, rootDir);
}

return true ;
}


/// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName"> 文件的完整路径 </param>
/// <returns></returns>
public static bool DeleteFile( string fileName)
{
if (Exists(fileName))
{
File.Delete(fileName);
return true ;
}
return false ;
}


public static void DeleteDir(DirectoryInfo dir)
{
if (dir == null )
{
throw new NullReferenceException( " 目录不存在 " );
}

foreach (DirectoryInfo d in dir.GetDirectories())
{
DeleteDir(d);
}

foreach (FileInfo 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 ;
}

DirectoryInfo dirInfo
= new DirectoryInfo(dir);
if (dirInfo.GetFiles().Length == 0 && dirInfo.GetDirectories().Length == 0 )
{
Directory.Delete(dir);
return true ;
}


if ( ! onlyDir)
{
return false ;
}
else
{
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 ;
}

DirectoryInfo dirInfo
= new DirectoryInfo(dir);
return FindFile(dirInfo, fileName);

}


public static bool FindFile(DirectoryInfo dir, string fileName)
{
foreach (DirectoryInfo d in dir.GetDirectories())
{
if (File.Exists(d.FullName + " \\ " + fileName))
{
return true ;
}
FindFile(d,fileName);
}

return false ;
}

}
}
复制代码
目录
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
2月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
81 2
|
1月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
13 0
|
2月前
|
安全 C# 开发者
C# 一分钟浅谈:文件操作与文件流详解
【9月更文挑战第4天】在日常开发中,文件的读写是基本而重要的任务。C# 通过 `System.IO` 命名空间提供了多种工具,如 `FileStream`、`StreamReader` 和 `StreamWriter` 等,用于处理文件和流。本文从基础概念入手,详细介绍了这些类的使用方法,并讨论了常见错误及其避免策略,包括文件不存在、权限问题和文件被占用等。通过示例代码,展示了如何创建、读取文件以及进行二进制数据操作,并强调了异常处理和性能优化的重要性。掌握这些技巧对于提升编程能力至关重要。
164 2
|
2月前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
25 2
|
3月前
|
C#
C#中的类和继承
C#中的类和继承
43 6
|
3月前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
34 0
|
3月前
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结
|
5月前
|
开发框架 .NET 编译器
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
37 2
|
5月前
|
C#
C# 版本的 计时器类 精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出
这篇2010年的文章是从别处搬运过来的,主要包含一个C#类`TimeCount`,该类有多个方法用于处理时间相关的计算。例如,`GetMaxYearCount`计算以毫秒为单位的最大年数,`GetCurrentTimeByMiliSec`将当前时间转换为毫秒,还有`SecondsToYYMMDDhhmmss`将秒数转换为年月日时分秒的字符串。此外,类中还包括一些辅助方法,如处理小数点后保留一位数字的`RemainOneFigureAfterDot`。