常用的读写文件,和地址转换(win和linux均支持),操作文件再也不是拼接那么的low了

using System;
using System.Diagnostics;
using System.IO;
using System.Text; namespace Cactus.Common
{
/// <summary>
/// 常用IO操作类
/// </summary>
public class IOHelper
{
/// <summary>
/// 系统路径转换为web路径地址
/// </summary>
/// <param name="fullPath">文件完整地址</param>
/// <param name="AppPath">应用地址</param>
/// <param name="dHear">是否去掉首部的分隔符</param>
/// <returns></returns>
public static string WebPathParse(string fullPath,string appPath,bool dHear)
{
string sys = Path.DirectorySeparatorChar.ToString();
string web = @"/";//web的分隔符
if (fullPath.StartsWith(appPath))
{
string webPath = fullPath.Remove(, appPath.Length);
webPath = webPath.Replace(sys, web);
if (webPath.StartsWith(web) == false)
{
webPath = web + webPath;
}
if (dHear)
{
webPath = IOHelper.RemoveHead(webPath, web);
}
return webPath;
}
else {
return "";
}
}
/// <summary>
/// web路径地址转换为系统路径
/// </summary>
/// <param name="appPath">应用路径</param>
/// <param name="webPath">web路径</param>
/// <param name="dHear">是否去掉首部的路径分隔符</param>
/// <returns></returns>
public static string SysPathParse(string appPath, string webPath, bool dHear)
{
string sys = Path.DirectorySeparatorChar.ToString();
string web = @"/";//web的分隔符
webPath = webPath.Replace(web, sys);
if (dHear)
{
webPath = IOHelper.RemoveHead(webPath, sys);
}
string result="";
if (appPath.EndsWith(sys))
{
if (webPath.StartsWith(sys))
{
result = appPath + webPath.Remove(,);
}
else
{
result = appPath + webPath;
}
}
else {
if (webPath.StartsWith(sys))
{
result = appPath + webPath;
}
else {
result = appPath + sys + webPath;
}
}
return result;
}
/// <summary>
/// 路径解析转换,转化成符合当前系统的路径符号
/// </summary>
/// <param name="path">路径</param>
/// <param name="flag">(路径的类型)1:windows \ 2:linux /(linux和web网页的分隔相符)</param>
/// <param name="dHear">是否去掉首部的路径分隔符</param>
/// <returns></returns>
public static string PathParse(string path, int flag, bool dHear)
{
string win = @"\";
string linux = @"/";
string sys=Path.DirectorySeparatorChar.ToString();
if (flag == )
{
path = path.Replace(win, sys);
}
else if (flag == )
{
path = path.Replace(linux, sys);
}
if (dHear) {
path = IOHelper.RemoveHead(path, sys);
}
return path;
}
/// <summary>
/// (递归)去掉所有首部出现的字符串
/// </summary>
/// <param name="str">源字符串</param>
/// <param name="headStr">首部出现的字符串</param>
/// <returns></returns>
public static string RemoveHead(string str, string headStr)
{
if (str.StartsWith(headStr))
{
str = str.Remove(, headStr.Length);
return RemoveHead(str, headStr);
}
else {
return str;
}
} /// <summary>
/// 返回指定目录下目录信息
/// </summary>
/// <param name="strDirectory">路径</param>
/// <returns></returns>
public static DirectoryInfo[] GetDirectory(string strDirectory)
{
if (string.IsNullOrEmpty(strDirectory) == false)
{
return new DirectoryInfo(strDirectory).GetDirectories();
}
return new DirectoryInfo[] { };
}
/// <summary>
/// 返回指定目录下所有文件信息
/// </summary>
/// <param name="strDirectory">路径</param>
/// <returns></returns>
public static FileInfo[] GetFiles(string strDirectory)
{
if (string.IsNullOrEmpty(strDirectory) == false)
{
return new DirectoryInfo(strDirectory).GetFiles();
}
return new FileInfo[] { };
}
/// <summary>
/// 返回指定目录下过滤文件信息
/// </summary>
/// <param name="strDirectory">目录地址</param>
/// <param name="filter"></param>
/// <returns></returns>
public static FileInfo[] GetFiles(string strDirectory, string filter)
{
if (string.IsNullOrEmpty(strDirectory) == false)
{
return new DirectoryInfo(strDirectory).GetFiles(filter, SearchOption.TopDirectoryOnly);
}
return new FileInfo[] { };
}
/// <summary>
/// debug输出
/// </summary>
/// <param name="ex"></param>
public static void WriteDebug(Exception ex)
{
Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Debug.WriteLine("Data:" + ex.Data + Environment.NewLine
+ " InnerException:" + ex.InnerException + Environment.NewLine
+ " Message:" + ex.Message + Environment.NewLine
+ " Source:" + ex.Source + Environment.NewLine
+ " StackTrace:" + ex.StackTrace + Environment.NewLine
+ " TargetSite:" + ex.TargetSite);
}
/// <summary>
/// 控制台数据错误
/// </summary>
/// <param name="ex"></param>
public static void WriteConsole(Exception ex)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine("Data:" + ex.Data + Environment.NewLine
+ " InnerException:" + ex.InnerException + Environment.NewLine
+ " Message:" + ex.Message + Environment.NewLine
+ " Source:" + ex.Source + Environment.NewLine
+ " StackTrace:" + ex.StackTrace + Environment.NewLine
+ " TargetSite:" + ex.TargetSite);
}
/// <summary>
/// 错误记录
/// </summary>
/// <param name="ex"></param>
public static void WriteLog(Exception ex)
{
WriteLog(ex,null);
}
/// <summary>
/// 错误记录
/// </summary>
/// <param name="ex">错误信息</param>
/// <param name="appendInfo">追加信息</param>
public static void WriteLog(Exception ex, string appendInfo) {
if (string.IsNullOrEmpty(appendInfo))
{
WriteLog("Data:" + ex.Data + Environment.NewLine
+ " InnerException:" + ex.InnerException + Environment.NewLine
+ " Message:" + ex.Message + Environment.NewLine
+ " Source:" + ex.Source + Environment.NewLine
+ " StackTrace:" + ex.StackTrace + Environment.NewLine
+ " TargetSite:" + ex.TargetSite);
}
else {
WriteLog("Data:" + ex.Data + Environment.NewLine
+ " InnerException:" + ex.InnerException + Environment.NewLine
+ " Message:" + ex.Message + Environment.NewLine
+ " Source:" + ex.Source + Environment.NewLine
+ " StackTrace:" + ex.StackTrace + Environment.NewLine
+ " TargetSite:" + ex.TargetSite + Environment.NewLine
+ " appendInfo:" + appendInfo);
}
}
/// <summary>
/// 写log
/// </summary>
/// <param name="InfoStr"></param>
public static void WriteLog(string InfoStr)
{
WriteLog(InfoStr, AppDomain.CurrentDomain.BaseDirectory + Path.DirectorySeparatorChar + "Log");
}
/// <summary>
/// 写log(自动时间log)
/// </summary>
/// <param name="InfoStr">内容</param>
/// <param name="FilePath">目录地址</param>
public static void WriteLog(string InfoStr, string DirPath)
{
WriteLog(InfoStr, DirPath, Encoding.UTF8);
}
/// <summary>
/// 写log(自动时间log)
/// </summary>
/// <param name="InfoStr">内容</param>
/// <param name="DirPath">目录地址</param>
/// <param name="encoding">编码</param>
public static void WriteLog(string InfoStr, string DirPath, Encoding encoding)
{
FileStream stream = null;
System.IO.StreamWriter writer = null;
try
{
string logPath = DirPath;
if (Directory.Exists(logPath) == false)
{
Directory.CreateDirectory(logPath);
}
string filepath = logPath + Path.DirectorySeparatorChar + "log_" + DateTime.Now.ToString("yyyyMMddHH") + ".txt";
if (File.Exists(filepath) == false)
{
stream = new FileStream(filepath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
}
else
{
stream = new FileStream(filepath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
}
writer = new System.IO.StreamWriter(stream, encoding);
writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
writer.WriteLine(InfoStr);
writer.WriteLine("");
}
finally
{
if (writer != null)
{
//writer.Close();
writer.Dispose();
}
//if (stream != null)
//{
// //stream.Close();
// stream.Dispose();
//}
}
} /// <summary>
/// 写log到指定文件(不存在就创建)
/// </summary>
/// <param name="InfoStr">内容</param>
/// <param name="FilePath">文件地址</param>
public static void WriteLogToFile(string InfoStr, string FilePath)
{
WriteLogToFile(InfoStr, FilePath,Encoding.UTF8);
}
/// <summary>
/// 写log到指定文件(不存在就创建)
/// </summary>
/// <param name="InfoStr">内容</param>
/// <param name="FilePath">文件地址</param>
/// <param name="encoding">编码</param>
public static void WriteLogToFile(string InfoStr, string FilePath, Encoding encoding)
{
FileStream stream = null;
System.IO.StreamWriter writer = null;
try
{
string logPath = FilePath;
if (File.Exists(logPath) == false)
{
stream = new FileStream(logPath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
}
else
{
stream = new FileStream(logPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
} writer = new System.IO.StreamWriter(stream, encoding);
writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
writer.WriteLine(InfoStr);
writer.WriteLine("");
}
finally
{
if (writer != null)
{
//writer.Close();
writer.Dispose();
}
//if (stream != null)
//{
// //stream.Close();
// stream.Dispose();
//}
}
}
/// <summary>
/// 写内容到指定文件(不存在就创建)
/// </summary>
/// <param name="InfoStr">内容</param>
/// <param name="FilePath">文件地址</param>
/// <param name="encoding">编码</param>
/// <param name="append">是否追加</param>
public static void WriteInfoToFile(string InfoStr, string FilePath, Encoding encoding,bool append)
{
FileStream stream = null;
System.IO.StreamWriter writer = null;
try
{
string logPath = FilePath;
if (File.Exists(logPath) == false)
{
stream = new FileStream(logPath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
writer = new System.IO.StreamWriter(stream, encoding);
}
else
{
//存在就覆盖
writer = new System.IO.StreamWriter(logPath, append, encoding);
}
writer.Write(InfoStr);
}
finally
{
if (writer != null)
{
//writer.Close();
writer.Dispose();
}
//if (stream != null)
//{
// //stream.Close();
// stream.Dispose();
//}
}
}
/// <summary>
///
/// </summary>
/// <param name="InfoStr"></param>
/// <param name="FilePath"></param>
/// <param name="encoding"></param>
public static void WriteInfoToFile(string InfoStr, string FilePath, Encoding encoding) {
WriteInfoToFile(InfoStr, FilePath, encoding,false);
}
/// <summary>
///
/// </summary>
/// <param name="InfoStr"></param>
/// <param name="FilePath"></param>
public static void WriteInfoToFile(string InfoStr, string FilePath)
{
WriteInfoToFile(InfoStr, FilePath, Encoding.UTF8, false);
}
/// <summary>
///
/// </summary>
/// <param name="datagram"></param>
/// <param name="FilePath"></param>
/// <param name="callback"></param>
/// <param name="numBytes"></param>
public static void AsyncWriteLog(byte[] datagram, string FilePath, AsyncCallback callback, int numBytes)
{
FileStream stream = null;
try
{
string logPath = FilePath;
if (File.Exists(logPath) == false)
{
stream = new FileStream(logPath, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite);
}
else
{
stream = new FileStream(logPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
} if (stream.CanWrite)
{ stream.BeginWrite(datagram, , numBytes, callback, "AsyncWriteLog_" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
throw new Exception("文件无法写入,文件或只读!");
}
}
finally
{
if (stream != null)
{
//stream.Close();
stream.Dispose();
}
}
}
/// <summary>
///
/// </summary>
/// <param name="datagram"></param>
/// <param name="FilePath"></param>
/// <param name="numBytes"></param>
public static void AsyncWriteLog(byte[] datagram, string FilePath, int numBytes)
{
AsyncWriteLog(datagram, FilePath, new AsyncCallback(AsyncCallbackFunc), numBytes);
}
public static void AsyncCallbackFunc(IAsyncResult result)
{
FileStream filestream = result.AsyncState as FileStream;
filestream.EndWrite(result);
filestream.Close();
} /// <summary>
/// 文本转义(方便讲文本转换成C#变量代码)
/// 例子 " 转化成 string str="\"";
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ToEscape(string str, string m_var)
{
/*
" \"
\ \\
*/
str = str.Trim();
str = str.Replace("\\", "\\\\");
str = str.Replace("\"", "\\\"");
return "string " + m_var + "=\"" + str + "\";";
}
public static string ReadTxt(string filePath) {
return ReadTxt(filePath, Encoding.UTF8);
}
/// <summary>
///
/// </summary>
/// <param name="filePath"></param>
/// <param name="enc"></param>
/// <returns></returns>
public static string ReadTxt(string filePath, Encoding enc) {
FileStream stream = null;
System.IO.StreamReader reader = null;
string result = "";
try
{
if (File.Exists(filePath) == false)
{
stream = new FileStream(filePath, FileMode.CreateNew, FileAccess.Read, FileShare.ReadWrite);
}
else
{
stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
reader = new System.IO.StreamReader(stream, enc);
result = reader.ReadToEnd();
}
}
catch (Exception e)
{
WriteLog(e);
}
finally
{
if (reader != null)
{
//reader.Close();
reader.Dispose();
}
//if (stream != null)
//{
// //stream.Close();
// stream.Dispose();
//}
}
return result;
}
/// <summary>
/// 读取Appliction目录下的文件
/// </summary>
/// <param name="filePath"></param>
/// <param name="enc"></param>
/// <returns></returns>
public static string AppReadTxt(string filePath, Encoding enc)
{ string appPath = AppDomain.CurrentDomain.BaseDirectory;
string path = appPath + filePath;
return ReadTxt(path, enc);
}
/// <summary>
/// 读取Appliction目录下的文件(UTF-8)
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string AppReadTxt(string filePath)
{
return AppReadTxt(filePath, System.Text.Encoding.UTF8);
}
}
}

IOHelper(自制常用的输入输出的帮助类)的更多相关文章

  1. Java常用的输入输出方法

    对于经常上机刷题的来说,首先得解决输入输出方法,Java的输入输出流在Java学习过程的后面部分才会接触,但是我们可以掌握一些简单的,常用的输入输出方法 首先输出 大家最熟悉的莫过于输出方法,直接用S ...

  2. C++学习43 输入输出有关的类和对象

    输入和输出是数据传送的过程,数据如流水一样从一处流向另一处.C++形象地将此过程称为流(Stream).C++的输入输出流是指由若干字节组成的宇节序列,这些宇节中的数据按顺序从一个对象传送到另一对象. ...

  3. java 常用的验证方法帮助类

    import java.text.ParseException; import java.util.Collection; import java.util.Map; /** * 常用的验证方法帮助类 ...

  4. 泛型集合、datatable常用数据类型转换Json帮助类

    泛型集合.datatable常用数据类型转换Json帮助类 using System; using System.Data; using System.Configuration; using Sys ...

  5. 转:C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、Sort)

    C#常用的集合类型(ArrayList类.Stack类.Queue类.Hashtable类.Sort) .ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理.在Array ...

  6. 6.算法竞赛中的常用JAVA API :Math类(转载)

    6.算法竞赛中的常用JAVA API :Math类 求最值 最小值 Math.min(int a, int b) Math.min(float a, float b) Math.min(double ...

  7. 算法竞赛中的常用JAVA API :大数类(转载)

    5.算法竞赛中的常用JAVA API :大数类 摘要 java中的基础数据类型能存储的最大的二进制数是 2 ^ 63 - 1 对应的十进制数是9223372036854775807(long类型的最大 ...

  8. 最最常用的 100 个 Java 类(转)

    大部分的 Java 软件开发都会使用到各种不同的库.近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些类有来自于 Java 的标准库,也有第三方库.每个类在同一个 ...

  9. Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现

    (一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类).所有抽象出来的数据结构和操作(算法)统称为集合框架. 程序员在具体应用的时候,不必考虑数据结构和 ...

随机推荐

  1. 为UniDBEdit添加拖拽属性

    不知是作者Fashard的疏忽还是有意,UniDBEdit的拖拽属性居然没有发布出来(其他组件都已发布).加上其实也很简单. 打开source目录下的uniDBEdit.pas单元,在TUniDBEd ...

  2. EntityFramework 学习 一 Entity Lifecycle 实体生命周期

    当我们执行CRUD(Create,Read,Update,Delete)操作之前,最重要的是搞明白实体的生命周期和EntityFrameword怎么管理实体 在一个实体的生命周期里,每个实体都有一个实 ...

  3. HBase启动后端口60010无法访问

    配置好HBase后,想从浏览器通过端口60010看下节点情况,但是提示无法访问 在服务器上netstat -natl|grep 60010 发现并没有60010端口 原来是因为HBase 1.0 之后 ...

  4. MyEclipse消除frame引起的the file xxx cannot be found

    因为该页面所指向的页面路径不对,便进行手动修改,修改时却出现了很烦的问题,输入一个字就弹出一个提示框“the file XXX can not be found.Please check the lo ...

  5. POJ 1258 Agri-Net(Prim算法)

    题意:n个农场,求把所有农场连接起来所需要最短的距离. 思路:prim算法 课本代码: //prim算法 #include<iostream> #include<stdio.h> ...

  6. 通知消息与ON_NOTIFY

    1.通知消息一般是由子控件发出,由父窗口响应,因此响应函数的位置在父窗口内. 2.通知消息发送给父窗口的是通知码,即WM_NOTIFY消息(但为了区分方便不同的消息有不同的名称,但都是以WM_NOTI ...

  7. python字符串相关操作

    字符串搜索相关搜索指定字符串,没有返回-1:str.find('t')指定起始位置搜索:str.find('t',start)指定起始及结束位置搜索:str.find('t',start,end)从右 ...

  8. yahoo的30条优化规则

    1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速 ...

  9. tcpdump示例

    今天有需求要用tcpdump,给一个我使用的例子: sudo /usr/sbin/tcpdump  dst 10.20.137.24 and tcp port 8080 -A -s0  -w nous ...

  10. html事件绑定总结以及window.onload和document.body.onload事件

    //1 document.onkeydown如果多次监听同样的事件,那么前面的监听函数都会被最后一次的监听函数所覆盖. //如下所示: document.onkeydown = function(ev ...