IO操作(C#)
发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,在一些游戏当中 , 通常将一些参数写在配置里面 , 无论是XML , EXCEL , TXT , BIN …… 我相信都会用到其中的一种 。首先 , XML , BIN 对于策划人员来说就很容易配置错
在一些游戏当中 , 通常将一些参数写在配置里面 , 无论是XML , EXCEL , TXT , BIN …… 我相信都会用到其中的一种 。首先 , XML , BIN 对于策划人员来说就很容易配置错误了。如果能用程序将Excel里面的数据转化为Txt , Bin , Xml数据, 就很爽了 , 关于Excel数据的读写我在前几篇博文中写过。 这里就涉及到了I/O的操作 。废话不多说 , 上代码 . 这里写的都是同步I/O操作 。
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;namespace ComprehensiveTest.com.myio{ public class IoManager { private static IoManager instance = null; public static IoManager Instance { get { if (IoManager.instance == null) { IoManager.instance = new IoManager(); } return IoManager.instance; } } ////// /// /// ///public bool CreateFile(string targetPath) { if (File.Exists(targetPath)) { return true; } else { try { //使用这2种方法都可以 //FileStream file = File.Create(targetPath); FileStream file = new FileStream(targetPath, FileMode.Create); file.Close(); return true; } catch (Exception e) { Console.WriteLine("创建文件{0},失败 , 原因 : {1} ", targetPath, e.ToString()); return false; } } } /// /// 获得电脑所有的驱动盘 /// ///public string[] GetMyLogicalDrives() { return Directory.GetLogicalDrives(); } /// /// 移动数据 /// /// 原始的路径 /// 新的路径 ///操作是否成功 public bool MoveFile(string oldPath, string newPath) { if (File.Exists(oldPath)) { try { File.Move(oldPath, newPath); return true; } catch (Exception e) { Console.WriteLine("移动文件{0},失败 , 原因 : {1} " , oldPath , e.ToString() ); return false; } } else { Console.WriteLine("Error , {0}文件不存在!!! " , oldPath ); return false; } } ////// 复制一个文件 /// /// /// ///public bool CopyFile(string oldPath, string newPath) { if (File.Exists(oldPath)) { try { File.Copy(oldPath, newPath); return true; } catch (Exception e) { Console.WriteLine("复制文件{0},失败 , 原因 : {1} ", oldPath, e.ToString()); return false; } } else { Console.WriteLine("Error , {0}文件不存在!!! ", oldPath); return false; } } /// /// 删除一个文件 /// /// ///public bool DeleteFile( string targetPath ) { if(File.Exists( targetPath )) { try { File.Delete(targetPath); return true; } catch (Exception e) { Console.WriteLine("删除文件{0},失败 , 原因 : {1} ", targetPath, e.ToString()); return false; } } else { Console.WriteLine("Error , {0}文件不存在!!! ", targetPath); return false; } } /// /// 创建一个文件夹 /// /// ///public bool CreateFolder(string path) { if (Directory.Exists(path)) { Console.WriteLine("文件夹{0}已经存在", path); return true; } else { try { DirectoryInfo dirInfo = Directory.CreateDirectory(path); Console.WriteLine("创建文件夹成功 , 创建时间为{0}", Directory.GetCreationTime(path)); return true; } catch (Exception e) { Console.WriteLine("创建文件夹失败 , 失败原因{0}", e.ToString()); return false; } } } /// /// 删除文件夹 /// /// ///public bool DeleteFolder(string path) { if (Directory.Exists(path)) { try { Directory.Delete(path); return true; } catch (Exception e) { Console.WriteLine("删除文件夹失败 , 失败原因{0}", e.ToString()); return false; } } else { return true; } } /// /// /// /// /// ///public bool MoveFolder(string oldPath , string newPath) { if (Directory.Exists(oldPath)) { try { Directory.Move(oldPath, newPath); return true; } catch (Exception e) { Console.WriteLine("移动文件夹{0},失败 , 原因 : {1} ", oldPath, e.ToString()); return false; } } else { Console.WriteLine("Error , {0}文件夹不存在!!! ", oldPath); return false; } } /// /// 读取文件( 一个个读 )老是在流以外 , 无法读到正确的值 /// /// ///public bool ReadOneByOneTest(string targetPath) { if (File.Exists(targetPath)) { FileStream fs = new FileStream(targetPath, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); br.BaseStream.Seek(0, SeekOrigin.Begin); //将指针设到开头 while (br.BaseStream.Position < br.BaseStream.Length) { try { Console.WriteLine(br.ReadString()); } catch (EndOfStreamException e) { Console.WriteLine("已经到了结尾 {0}", e.ToString()); } } br.Close(); fs.Close(); return true; } else { return false; } } /// /// 读取文本 /// /// ///public bool ReadCommon(string targetPath) { if (File.Exists(targetPath)) { //using (StreamReader sr = File.OpenText(targetPath)) // 读中文将乱码 using( StreamReader sr = new StreamReader( targetPath , UnicodeEncoding.GetEncoding("GB2312"))) // 解决中文乱码问题 { string readStr; while ((readStr = sr.ReadLine()) != null) { Console.WriteLine(readStr); } sr.Close(); } return true; } else { return false; } } /// /// /// /// /// /// ///public bool WriteCommon(string targetPath , string content , bool isNendWarp ) { if (File.Exists(targetPath)) { //using (StreamWriter sw = File.AppendText(targetPath)) // 中文乱码 using( StreamWriter sw = new StreamWriter( targetPath , true ,UnicodeEncoding.GetEncoding("GB2312"))) // 解决中文乱码问题 { if (isNendWarp) { sw.WriteLine(content); } else { sw.Write(content); } sw.Close(); } return true; } else { return false; } } }}
StreamWriter( targetPath , true ,UnicodeEncoding.GetEncoding("GB2312"))
第二个参数为false : 表示覆盖写入
这里我都测过了 , OK的 , 有一个方法 : ReadOneByOneTest 老是读不到数据 :
望高手指点!