C#讀取寫入文件的3種方式示例代碼
更新時間:2022年06月15日 10:42:55 作者:時間里的
最近操作文件頻繁,所以這篇文章主要給大家介紹了關于C#讀取寫入文件的3種方式,文中通過實例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友可以參考下
最新對文件的操作比較頻繁。這里記錄一下常用的幾種文件讀寫的方式。
我這里使用窗體來做測試。
1:二進制讀寫
/// <summary>
/// 二進制寫入文件
/// </summary>
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.FileName = "File";
saveDlg.Title = "保存數(shù)據(jù)";
saveDlg.Filter = "File(*.txt)|*.txt";
saveDlg.DefaultExt = "txt";
saveDlg.AddExtension = true;
//saveDlg.InitialDirectory = "D:AMC Results";
if (saveDlg.ShowDialog() == DialogResult.OK)
{
Cursor = Cursors.WaitCursor;
SaveDatafileWithNewVersion(saveDlg.FileName);
Cursor = Cursors.Default;
}
}
/// <summary>
/// 二進制保存文件
/// </summary>
public static void SaveDatafileWithNewVersion(String sFile)
{
//文件格式依次為:內(nèi)部版本號,...
Stream stream = File.Open(sFile, FileMode.Create);
BinaryWriter bw = new BinaryWriter(stream);
bw.Write((Int16)1);//內(nèi)部版本號,暫時用1,表示版本1,整型
///寫入Config對象
bw.Write("澤國江山入戰(zhàn)圖
");
bw.Write("生民何計樂樵蘇
");
bw.Write("憑君莫話封侯事
");
bw.Write("一將功成萬骨枯
");
bw.Close();
stream.Close();
}
/// <summary>
/// 打開文件
/// </summary>
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog openDlg = new OpenFileDialog();
openDlg.Title = "File";
openDlg.Filter = "File (*.txt)|*.txt";
if (openDlg.ShowDialog() == DialogResult.OK)
{
BinaryReader br = new BinaryReader(new FileStream(openDlg.FileName,
FileMode.Open));
string str = "";
int number = br.ReadInt16();
str += br.ReadString();
str += br.ReadString();
str += br.ReadString();
str += br.ReadString();
richTextBox1.Text = str;
br.Close();
}
}2:泛型讀寫:
/// <summary>
/// 泛型寫入
/// </summary>
private void button3_Click(object sender, EventArgs e)
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.FileName = "File";
saveDlg.Title = "保存數(shù)據(jù)";
saveDlg.Filter = "File(*.txt)|*.txt";
saveDlg.DefaultExt = "txt";
saveDlg.AddExtension = true;
//saveDlg.InitialDirectory = "D:AMC Results";
if (saveDlg.ShowDialog() == DialogResult.OK)
{
string str = "澤國江山入戰(zhàn)圖
生民何計樂樵蘇
憑君莫話封侯事
一將功成萬骨枯
";
BinarySerialize<string>(str, saveDlg.FileName);
}
}
/// <summary>
/// 寫入文件
/// </summary>
/// <typeparam name="T">類型</typeparam>
/// <param name="obj">寫入類型</param>
/// <param name="path">路徑</param>
public static void BinarySerialize<T>(T obj, string path)
{
FileStream fileStream = new FileStream(path, FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
try
{
b.Serialize(fileStream, obj);
fileStream.Close();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (fileStream != null)
{
fileStream.Close();
fileStream.Dispose();
}
}
}
/// <summary>
/// 泛型讀取
/// </summary>
private void button4_Click(object sender, EventArgs e)
{
OpenFileDialog openDlg = new OpenFileDialog();
openDlg.Title = "File";
openDlg.Filter = "File (*.txt)|*.txt";
if (openDlg.ShowDialog() == DialogResult.OK)
{
string str = BinaryDeserialize<string>(openDlg.FileName);
richTextBox2.Text = str;
}
}
/// <summary>
/// 讀取文件
/// </summary>
/// <typeparam name="T">類型</typeparam>
/// <param name="path">路徑</param>
/// <returns></returns>
public static T BinaryDeserialize<T>(string path)
{
FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter b = new BinaryFormatter(); //SoapFormatter
T rs;
try
{
rs = (T)b.Deserialize(fileStream);
return rs;
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (fileStream != null)
{
fileStream.Close();
fileStream.Dispose();
}
}
return default(T);
}3:XML讀寫:不是很穩(wěn)定
/// <summary>
/// XML寫入
/// </summary>
private void button5_Click(object sender, EventArgs e)
{
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.FileName = "File";
saveDlg.Title = "保存數(shù)據(jù)";
saveDlg.Filter = "File(*.txt)|*.txt";
saveDlg.DefaultExt = "txt";
saveDlg.AddExtension = true;
//saveDlg.InitialDirectory = "D:AMC Results";
if (saveDlg.ShowDialog() == DialogResult.OK)
{
string str = "澤國江山入戰(zhàn)圖
生民何計樂樵蘇
憑君莫話封侯事
一將功成萬骨枯
";
SerializeToXml<string>(saveDlg.FileName, str);
}
}
/// <summary>
/// XML序列化某一類型到指定的文件
/// /// </summary>
/// /// <param name="filePath">文件路徑</param>
/// /// <param name="obj">寫入對象</param>
/// /// <param name="type"></param>
public static void SerializeToXml<T>(string filePath, T obj)
{
try
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
xs.Serialize(writer, obj);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// XML讀取
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button6_Click(object sender, EventArgs e)
{
OpenFileDialog openDlg = new OpenFileDialog();
openDlg.Title = "File";
openDlg.Filter = "File (*.txt)|*.txt";
if (openDlg.ShowDialog() == DialogResult.OK)
{
string str = DeserializeFromXml<string>(openDlg.FileName);
richTextBox3.Text = str;
}
}
/// <summary>
/// 從某一XML文件反序列化到某一類型
/// </summary>
/// <param name="filePath">待反序列化的XML文件名稱</param>
/// <param name="type">反序列化出的</param>
/// <returns></returns>
public static T DeserializeFromXml<T>(string filePath)
{
try
{
if (!System.IO.File.Exists(filePath))
throw new ArgumentNullException(filePath + " not Exists");
using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
T ret = (T)xs.Deserialize(reader);
return ret;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return default(T);
}
}最終效果:

總結
到此這篇關于C#讀取寫入文件的3種方式的文章就介紹到這了,更多相關C#讀取寫入文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C# DataGridView中實現(xiàn)勾選存儲數(shù)據(jù)和右鍵刪除數(shù)據(jù)(示例代碼)
這篇文章主要介紹了C# DataGridView中實現(xiàn)勾選存儲數(shù)據(jù)和右鍵刪除數(shù)據(jù)的示例代碼,通過示例代碼給大家展示運行效果圖,需要的朋友可以參考下2021-07-07

