C#语法基础-05-文件操作

C#语法基础-05-文件操作

写这两篇文章的目的是为了备忘、 C#语言在大学读书时候学过、当时做过一些东西、但是由于从事的主要工作和C#无关便忘记了。 近来公司增加了Unity业务、 写Unity主要是C# 和js 想来C# 的语法结构和Java很相似、于是采用了C#语言作为公司游戏项目的主要语言。

本系列主要分上中下三篇文章来记录。 分别牵涉到C# 中的初级、中级、高级内容。

由于本月一直忙于公司的项目、 所以发文就耽搁了, 但是回想五月忙上过去了,还是整理整理发一篇吧。

本文主要写一些关于C#语言的高级知识, 如果没有看过初级的,可以先看上一篇文章,在电脑上敲敲试试,跑一下看看。

  1. 文件操作_查看文件和文件夹信息
namespace _文件操作_查看文件和文件夹信息 {class Program {static void Main(string[] args) {//相对路径:就是找当前程序所在的路径//FileInfo fileInfo = new FileInfo("TextFile1.txt");//绝对路径:加上文件完整的路径名//FileInfo fileInfo = new FileInfo(@"C:\Users\samuelnotes\学习csharp编程 高级篇\01-文件操作-查看文件和文件夹信息\bin\Debug\TextFile1.txt");//Console.WriteLine(fileInfo.Exists);//判断该文件是否存在//Console.WriteLine(fileInfo.Name);//文件名.后缀//Console.WriteLine(fileInfo.Directory);//取得文件所在路径//Console.WriteLine(fileInfo.Length);//Console.WriteLine(fileInfo.IsReadOnly);fileInfo.Delete();//删除的是输出路径的文件,工程下的文件还是存在的//fileInfo.CopyTo("tt.txt");//FileInfo fileInfo = new FileInfo("siki.txt");//if (fileInfo.Exists == false)//如果当前文件不存在//{//    fileInfo.Create();//创建当前文件//}//fileInfo.MoveTo("siki2.txt");//重命名操作//文件夹操作(目录操作) (按照完整路径名创建)//DirectoryInfo dirInfo = new DirectoryInfo(@"C:\Users\samuelnotes\Documents\01-文件操作-查看文件和文件夹信息\bin\Debug");//查看Debug文件夹的信息//Console.WriteLine(dirInfo.Exists);//Console.WriteLine(dirInfo.Name);//Console.WriteLine(dirInfo.Parent);//Console.WriteLine(dirInfo.Root);//Console.WriteLine(dirInfo.CreationTime);//dirInfo.CreateSubdirectory("samuelnotes");//DirectoryInfo dirInfo = new DirectoryInfo("test");//if (dirInfo.Exists == false)//{//    dirInfo.Create();//创建目录//}Console.ReadKey();}}
}

2.使用File读写文件


namespace _02_使用File读写文件 {class Program {static void Main(string[] args){//string[] strArray = File.ReadAllLines("TextFile1.txt");//读取文件,把每一个行文本读取成一个字符串,最后组成一个字符串的数组//foreach (var s in strArray)//{//    Console.WriteLine(s);//}//string s = File.ReadAllText("TextFile1.txt");//Console.WriteLine(s);//byte[] byteArray = File.ReadAllBytes("3.LINQ.png");//foreach (var b in byteArray)//{//    Console.Write(b);//}//File.WriteAllText("textfile2.txt", "hello sdf中国");//File.WriteAllLines("textfile3.txt",new string[]{" sdfsdflk","213412","流口水的减肥"});byte[] data = File.ReadAllBytes("3.LINQ.png");File.WriteAllBytes("4.png",data);Console.ReadKey();}}
}
  1. 使用FileStream读写文件

namespace _03_使用FileStream读写文件 {class Program {static void Main(string[] args) {//1,创建文件流 用来操作文件//FileStream stream = new FileStream("TextFile1.txt",FileMode.Open);2, 读取或者写入数据//byte[] data = new byte[1024];//数据容器1 byte = 1字节  1024byte=1KB 1024KB=1MB 1024MB = 1GB 1024GB=1T//while (true)//{//    int length = stream.Read(data, 0, data.Length);//    if (length == 0)//    {//        Console.WriteLine("读取结束");//        break;//    }//    for (int i = 0; i < length; i++) {//        Console.Write(data[i] + " ");//    }//}//使用filestream完成文件复制// 1.5MB = 1.5*1024KB = 2k多KB= 2k多*1000 byteFileStream readStream = new FileStream("3.LINQ.png",FileMode.Open);FileStream writeStream = new FileStream("LINQ副本.png",FileMode.Create);byte[] data = new byte[1024];while (true){int length = readStream.Read(data, 0, data.Length);if (length == 0){Console.WriteLine("读取结束");break;}else{writeStream.Write(data,0,length);   }}writeStream.Close();readStream.Close();Console.ReadKey();}}
}
  1. StreamReader和StreamWriter

namespace _04_使用StreamReader和StreamWriter读写文本文件 {class Program {static void Main(string[] args) {//创建文本文件读取流//StreamReader reader = new StreamReader("TextFile1.txt");//while (true)//{//    string str = reader.ReadLine();//读取一行字符串//    if (str == null) break;//    Console.WriteLine(str);//}//string str = reader.ReadToEnd();//读取到文本的结尾(读取文本中所有的字符)//Console.WriteLine(str);//while (true)//{//    int res = reader.Read();//读取//    if (res == -1)//    {//        break;//    }//    else//    {//        Console.Write((char)res);//    }//}//reader.Close();//文本文件写入流StreamWriter writer = new StreamWriter("textfile2.txt");//如果文件存在,那么文件会被覆盖while (true){string message = Console.ReadLine();if (message == "q")break;//writer.Write(message);//写入一个字符串writer.WriteLine(message);//吸入一个字符串并换行}writer.Close();//Console.ReadKey();}}
}
  1. xml 读写

namespace _5_xml {class Program {static void Main(string[] args) {//创建技能信息集合,用来存储所有的技能信息List skillList = new List();// XmlDocment专门用来解析xml文档的XmlDocument xmlDoc = new XmlDocument();//选择要加载解析的xml文档的名字//xmlDoc.Load("skillinfo.txt");xmlDoc.LoadXml(  File.ReadAllText("skillinfo.txt") );//传递一个字符串(xml格式的字符串)//得到根结点 (xmlnode用来代表一个结点)XmlNode rootNode = xmlDoc.FirstChild;//获取第一个结点 //得到根结点下面的子节点的集合XmlNodeList skillNodeList=  rootNode.ChildNodes;//获取当前结点下面的所有子节点foreach (XmlNode skillNode in skillNodeList){Skill skill = new Skill();XmlNodeList fieldNodeList = skillNode.ChildNodes;//获取skill结点下面所有的结点 foreach (XmlNode fieldNode in fieldNodeList){if (fieldNode.Name == "id")//通过Name属性 可以获取一个结点的名字{int id = Int32.Parse(fieldNode.InnerText);//获取结点内部的文本skill.Id = id;}else if (fieldNode.Name == "name"){string name = fieldNode.InnerText;skill.Name = name;skill.Lang = fieldNode.Attributes[0].Value;}else{skill.Damage = Int32.Parse(fieldNode.InnerText);}}skillList.Add(skill);}foreach (Skill skill in skillList){Console.WriteLine(skill);}Console.ReadKey();}}
}class Skill {public int Id { get; set; }public string Name { get; set; }public string Lang { get; set; }public int Damage { get; set; }public override string ToString(){return string.Format("Id: {0}, Name: {1}, Lang: {2}, Damage: {3}", Id, Name, Lang, Damage);}}namespace _xml文档解析_技能信息 {class Program {static void Main(string[] args) {List skillList = new List();XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load("xml技能信息.txt");//XmlNode skillInfoNode = xmlDoc.FirstChild;//XmlNode skillListNode = skillInfoNode.FirstChild;XmlNode skillListNode = xmlDoc.FirstChild.FirstChild;XmlNodeList skillNodeList = skillListNode.ChildNodes;foreach (XmlNode skillNode in skillNodeList){Skill skill = new Skill();XmlElement ele = skillNode["Name"];skill.Name = ele.InnerText;XmlAttributeCollection col = skillNode.Attributes;//获取该结点属性的集合//skill.Id = Int32.Parse(col["SkillID"].Value);XmlAttribute idAttribute = col["SkillID"];//通过字符串索引器 获取一个属性对象skill.Id = Int32.Parse(idAttribute.Value);skill.EngName = col["SkillEngName"].Value;skill.TriggerType = Int32.Parse(col["TriggerType"].Value) ;skill.ImageFile = col["ImageFile"].Value;skill.AvailableRace = Int32.Parse(col["AvailableRace"].Value);skillList.Add(skill);}foreach (Skill s in skillList){Console.WriteLine(s);}Console.ReadKey();}}
}
  1. json操作

namespace _06_json操作 {class Program {static void Main(string[] args) {//使用litjson进行解析json文本//两种引入litjson的方法//1,去litjson的网站下载litjson.dll 然后添加引用 找到dll所在目录//2,右键引用 打开管理netget程序包,在联机里面搜索litjson  在搜索结果中选择一个 点击安装//List skillList = new List();//我们使用jsonMapper去解析json文本//jsondata代表一个数组或者一个对象//在这里jsonData代表数组 //JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));//foreach (JsonData temp in jsonData)//在这里temp代表一个对象//{//    Skill skill = new Skill();//    JsonData idValue =temp["id"]; //通过字符串索引器可以取得键值对的值//    JsonData nameValue = temp["name"];//    JsonData damageValue = temp["damage"];//    int id = Int32.Parse(idValue.ToString());//    int damage = Int32.Parse(damageValue.ToString());//    //Console.WriteLine(id+":"+nameValue.ToString()+":"+damage);//    skill.id = id;//    skill.damage = damage;//    skill.name = nameValue.ToString();//    skillList.Add(skill);//}//foreach (var temp in skillList)//{//    Console.WriteLine(temp);//}//使用泛型去解析json//json里面对象的键必须跟定义的类里面的字段或者属性保持一致//Skill[] skillArray= JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));//foreach (var temp in skillArray)//{//    Console.WriteLine(temp);//}//List skillList = JsonMapper.ToObject>(File.ReadAllText("json技能信息.txt"));//foreach (var temp in skillList) {//    Console.WriteLine(temp);//}//Player p= JsonMapper.ToObject(File.ReadAllText("主角信息.txt"));//Console.WriteLine(p);//foreach (var temp in p.SkillList)//{//    Console.WriteLine(temp);//}Player p = new Player();p.Name = "花千骨";p.Level = 100;p.Age = 16;string json =JsonMapper.ToJson(p);Console.WriteLine(json);Console.ReadKey();}}
}class Player{//    public string name;//字段或者属性名 要跟json里面的对应//    public int level;public string Name { get; set; }public int Level { get; set; }public int Age { get; set; }public List SkillList { get; set; }public override string ToString(){return string.Format("Name: {0}, Level: {1}, Age: {2}, SkillList: {3}", Name, Level, Age, SkillList);}}class Skill{public int id;public int damage;public string name;public override string ToString(){return string.Format("Id: {0}, Damage: {1}, Name: {2}", id, damage, name);}}

7.excel 操作


namespace _07_Excel操作 {class Program {static void Main(string[] args){string fileName = "装备信息.xls";string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";//创建连接到数据源的对象OleDbConnection connection = new OleDbConnection(connectionString);//打开连接connection.Open();string sql = "select * from [Sheet1$]";//这个是一个查询命令OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connection);DataSet dataSet = new DataSet();//用来存放数据 用来存放DataTableadapter.Fill(dataSet);//表示把查询的结果(datatable)放到(填充)dataset里面connection.Close();//释放连接资源//取得数据DataTableCollection tableCollection= dataSet.Tables;//获取当前集合中所有的表格DataTable table = tableCollection[0];//因为我们只往dataset里面放置了一张表格,所以这里取得索引为0的表格就是我们刚刚查询到的表格//取得表格中的数据//取得table中所有的行DataRowCollection rowCollection = table.Rows;//返回了一个行的集合//遍历行的集合,取得每一个行的datarow对象foreach (DataRow row in rowCollection){//取得row中前8列的数据 索引0-7for (int i = 0; i < 8; i++){Console.Write(row[i]+" ");}Console.WriteLine();}Console.ReadKey();}}
}
  1. 总结

还是那句话、多思考、上手敲代码、 调试调试、多试试。 如果有问题可以评论区留言共同学习进步。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部