开发中总会有要读取文件的操作,这里提供一个简单的读写方法。其中包含了然 Datatable 与 txt 的转换,复制粘贴可能缺少引用,自己加一下吧!
#region 读写txt文件方法
/// <summary>
/// 获取指定文件内容
/// 按行分隔为字符串数组
/// </summary>
/// <param name="path">文件路径,包含文件名</param>
/// <returns>按行分隔为字符串数组</returns>
public static string[] GetTxtContent(string path)
{
try
{
//打开一个文件流
Stream myStream = File.OpenRead(path);
//定义一个读取流
StreamReader myStreamReader = new StreamReader(myStream, System.Text.Encoding.Default);
//把读取指针指到文件头,并且设置读取时的偏移量为 0
myStreamReader.BaseStream.Seek(0, SeekOrigin.Begin);
string TxtContent = myStreamReader.ReadToEnd();
myStream.Close();
return TxtContent.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
}
catch
{
return null;
}
}
/// <summary>
/// 获取指定文件内容
/// 整个文件内容字符串
/// </summary>
/// <param name="path">文件路径,包含文件名</param>
/// <returns>整个文件内容字符串</returns>
public static string GetTxtContentBlock(string path)
{
try
{
//打开一个文件流
Stream myStream = File.OpenRead(path);
//定义一个读取流
StreamReader myStreamReader = new StreamReader(myStream, System.Text.Encoding.Default);
//把读取指针指到文件头,并且设置读取时的偏移量为 0
myStreamReader.BaseStream.Seek(0, SeekOrigin.Begin);
string TxtContent = myStreamReader.ReadToEnd();
myStream.Close();
return TxtContent;
}
catch
{
return null;
}
}
/// <summary>
/// 将指定内容写入指定的文本文件中
/// 保存时,原有文件内容将被全部清空
/// 行与行之间以 \r\n 进行分隔
/// </summary>
/// <param name="path">文件路径,包含文件名</param>
/// <param name="Content">要写入的内容,各字符串以回车()分隔</param>
/// <returns>写入是否成功</returns>
public static bool TxtWrite(string path, string[] Content)
{
try
{
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);
//string tempS = "";
StringBuilder sbBuilder = new StringBuilder();
foreach (string s in Content)
{
sbBuilder.Append(s + "\r\n");
//tempS += s + "\r\n";
}
string tempS = sbBuilder.ToString();
byte[] bt = System.Text.Encoding.Default.GetBytes(tempS);
fs.Write(bt, 0, bt.Length);
fs.Close();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 将指定内容写入指定的文本文件中
/// 保存时,原有文件内容将被全部清空
/// </summary>
/// <param name="path">文件路径,包含文件名</param>
/// <param name="Content">要写入的内容</param>
/// <returns>写入是否成功</returns>
public static bool TxtWrite(string path, string Content)
{
try
{
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);
byte[] bt = System.Text.Encoding.Default.GetBytes(Content);
fs.Write(bt, 0, bt.Length);
fs.Close();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 将文本文件数据转换为DataTable
/// </summary>
/// <param name="s">各行数据信息</param>
/// <param name="ColumnsType">各列的类型,设置为 "" 时视为 System.String
/// 当前仅支持 System.String, System.DateTime ,System.Decimal</param>
/// <returns></returns>
public static DataTable StringToDataTable(string[] s,string[] ColumnsType)
{
if (s.Length <= 0)
{
return null;
}
if (s.Length == 1 && s[0] == "")
{
return null;
}
DataTable reslutDT = new DataTable();
string[] tmpStr;
tmpStr = s[0].Split(Convert.ToChar(Keys.Tab));
if (tmpStr.Length != ColumnsType.Length)
{
MessageBox.Show("表格数据列总数与设置的类型总数不一致", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return null;
}
for (int i = 0; i < tmpStr.Length; i++)
{
DataColumn dc;
if(ColumnsType[i]=="System.DateTime")
{
dc = new DataColumn("", typeof(DateTime));
}
else if (ColumnsType[i] == "System.Decimal")
{
dc = new DataColumn("", typeof(Decimal));
}
else if (ColumnsType[i] == "System.Double")
{
dc = new DataColumn("", typeof(Double));
}else if(ColumnsType[i]== "System.Int32")
{
dc = new DataColumn("", typeof(System.Int32));
}
else
{
dc = new DataColumn("", typeof(String));
}
reslutDT.Columns.Add(dc);
}
DataRow dr;
int x = 0;
for (; x < s.Length; x++)
{
dr = reslutDT.NewRow();
tmpStr = s[x].Split(Convert.ToChar(Keys.Tab));
for (int k = 0; k < tmpStr.Length; k++)
{
dr[k] = tmpStr[k];
}
reslutDT.Rows.Add(dr);
}
return reslutDT;
}
/// <summary>
/// 将文本文件导入的数据转换为DataTable
/// </summary>
/// <param name="HavedHeader">标记第一行是否是标题行</param>
/// <param name="s">各行数据信息</param>
/// <returns></returns>
public static DataTable StringToDataTable(string[] s,bool HavedHeader)
{
if (s.Length <= 0)
{
return null;
}
if (s.Length == 1 && s[0] == "")
{
return null;
}
DataTable reslutDT = new DataTable();
string[] tmpStr;
tmpStr = s[0].Split(Convert.ToChar(Keys.Tab));
if (HavedHeader)
{
for (int i = 0; i < tmpStr.Length; i++)
{
reslutDT.Columns.Add(tmpStr[i]);
}
}
else
{
for (int i = 0; i < tmpStr.Length; i++)
{
reslutDT.Columns.Add();
}
}
DataRow dr;
int x = 0;
if (HavedHeader)
{
x = 1;
}
for (; x < s.Length; x++)
{
dr = reslutDT.NewRow();
tmpStr = s[x].Split(Convert.ToChar(Keys.Tab));
for (int k = 0; k < tmpStr.Length; k++)
{
dr[k] = tmpStr[k];
}
reslutDT.Rows.Add(dr);
}
return reslutDT;
}
#endregion