C#高级学习第七章-文件操作

来源:互联网 发布:电脑电话营销软件 编辑:程序博客网 时间:2024/05/21 09:42

文件操作fileinfo:

FileInfo fileinfo=new FileInfo("TextFile1.txt")   相对路径:就是找当前程序所在的路径

FileInfo fileinfo=new FileInfo("C:\Users\Visual studio 2017"); 绝对路径:加上文件完整的路径名

fileinfo.Exists;  判断文件是否存在本程序路径下

fileinfo.Name  文件的名字

fileinfo.Directory  文件所在的目录

fileinfo.Length  文件的大小 单位字节

fileinfo.IsReadOnly  是否是只读的

fileinfo.Delete()  删除的是输出路径的文件,工程下的文件还是存在的

fileinfo.CopyTo("xx.txt")  复制文件

fileinfo.Create();   创建当前文件

fileinfo.MoveTo("siki2.txt");  重命名操作


文件夹的操作:(DirectoryInfo)

DirectoryInfo dirinfo=new DirectoryInfo("C:\Users\Debuger\bin");  //绝对路径

dirinfo.Exists  文件夹是否存在

dirinfo.Name 文件夹名字

dirinfo.Parent  父目录

dirinfo.root  根目录

dirindo.CreatSubdirectory("siki")  创建一个子目录

dirinfo.Creat() 创建当前文件夹


使用File读写文件:(读写较小的文件)

using System.IO

//文本文档

String[] staArray= File.ReadAllLines("TextFile1.txt");  把每一行文本读取成一个字符串,最后组成一个字符串数组

String s=File.ReadAllText("TextFile1.txt");  读取成一个字符串

//非文本文档:

Byte[] byteArray= File.ReadAllBytes("3.LINQ.png");  读取一个图片


写文件:

File.WriteAllText("text2File.txt","hello 中国");  将信息写入text2File.txt文件中,若没有这个文件,则在本文档创建一个

File.WriteAllLine("text3File.txt",new string[]{"dasfafad","131545","大红色大神"}); 将字符串数组写到文件中


Byte[] data=File.ReadAllBytes("3.LINQ.jpg");  读取这个图片

File.WriteAllBytes("4.Linq.jpg",data)   相当于复制这个图片


使用FileStream读写文件:(一般读写较大的,非文本文件)

FileStream readstream=new FileStream("3.LINQ.jpg",FileMode.Open);  打开这个文件

FileStream writestream=new FileStream("Linq副本.jpg",FileMode.Creat);  创建一个文件    将一个图片复制当前文档中

byte[] data=new byte[1024];

while(true)

{

    int length=readstream.Read(data,0,data.Length);   读取这个文件

    if(length==0)

    {

        Debug.Log("读取完毕");

        break;

    }

    else

    {

        writestream.Write(data,0,length);        复制这个文件

    }

}

readstream.Close();

writestream.Close();


使用读写文本文件(StreamReader,streamWriter)

StreamReader reader=new StreamReader("TextFile1.text") ; 创建文本文件读取流

while(true)

{

string str=reader.ReadLine();  读取一行字符串

if(str==null)

 {

    break;  读取结束

 }

 else

  Debug.Log(str);

}

string str=reader.ReadToEnd(); 读取到文本的结尾(读取文本中所有的字符)

while(true)

{

 int res=reader.Write();    读取一个字符

 if(res==-1)

{

   break;

}

else

{

   Debug.Log((char)res);

}

}


StreamWriter: 文本文件写入流

StreamWriter writer=new StreamWriter("textFile2.txt"); 如果没有这个文件,则创建一个,如果文件存在,那么文件将会被覆盖

while(true)

{

 string message=Console.ReadLine();

 if(message=="q")

{

 break;

}

else

{

 writer.Write(message);  写入一个字符串

 writer.WriteLine(message); 写入一个字符串并换行

}

}

writer.Close();


xml文档:


 <skills>

<skill>

<id>2</id>

<name lang="cn">天下无双</name>

<damage>120</damage>

</skill>

<skill>

<id>3</id>

<name lang="cn">绝对零度</name>

<damage>90</damage>

</skill>

<skill>

<id>4</id>

<name lang="en">Xxxx</name>

<damage>400</damage>

</skill>

</skills>



-------------------------------------------------------------------------------------------------------------------------------------------------
public class Skill
{
   //技能类
    public int Id{get;ste;}
    public string Name{get;set;}
    public string Lang{get;set}
    public int Damage{get;set;}
}

------------------------------------------------------------------------------------------------------------------------------------------------
using System.Xml;
//创建技能信息集合,用来存储所有技能信息
List<Skill> skillList=new List<Skill>();

//XmlDocument专门用来解析xml文档的
XmlDocument xmlDoc=new XmlDocument();
//选择要加载解析的xml文档的名字
xmlDoc.Load("skillinfo.txt");    Or   xmlDoc.LoadXml(File.ReadAllText(skillinfo.txt))  //传递一个字符串(xml格式的字符串)

//得到根节点(xmlNode代表一个结点)
xmlNode rootNode= xmlDoc.FristChild; 获取第一个结点

//得到根节点下面的子结点集合
XmlNodeList skillNodeList = rootNode.ChildNodes ; 获取当前结点下面的子结点
foreach(XmlNode skillNode in skillNodeList)
{
   Skill skill = new Skill();
    XmlNodeList filedNodeList=skillNode.ChildNodes; //获取skill结点下面所有结点
   foreach(XmlNode filedNode in filedNodeList)
  {
       if(filedNode.Name=="id")  //通过Name属性可以获取一个结点的名字
      {
             int id=Int32.Parse( filedNode.InnerText);  //获取结点内部的文本  将字符串转化为整数
             skill.Id=id;
      }else if(filedNode.Name=="name")
      {
          skill.Name=filedNode.InnerText;
          skill.Lang= filedNode.Attributes[0].Value;   获取结点里的属性
      }
      else
     {
          skill.Damage=Int32.Parse(filedNode.InnerText);
     }

  }

}



ForExample:例子
using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Xml;using System;public class XMLExrecise1 : MonoBehaviour {    public List<Skill> skillList = new List<Skill>();    void Start ()    {        XmlDocument xmlDoc = new XmlDocument();        xmlDoc.Load("xml技能信息.txt");        XmlNode skillinfoNode= xmlDoc.FirstChild;        XmlNode skillListNode = skillinfoNode.FirstChild;        XmlNodeList skillNodeList= skillListNode.ChildNodes;        foreach(XmlNode skillNode in skillNodeList)        {            Skill skill = new Skill();            XmlElement skillname= skillNode["Name"];            skill.Name = skillname.InnerText;           XmlAttributeCollection col= skillNode.Attributes;            skill.Id = Int32.Parse(col["SkillID"].Value);            skill.EnglishName = col["skillEngName"].Value;            skill.TriggerType = Int32.Parse(col["TriggerType"].Value);            skill.ImageFile = col["ImageFile"].Value;            skill.AvaillableRace = Int32.Parse(col["AvaillableRace"].Value);        }}}public class Skill{    public int Id { get; set; }    public string Name { get; set; }    public string EnglishName { get; set; }    public int TriggerType { get; set; }    public string ImageFile { get; set; }    public int AvaillableRace { get; set; }    public override string ToString()    {        return Id + Name + EnglishName + TriggerType + ImageFile + AvaillableRace;    }}

Json:

[

 {"id":2,"name":"天下无双","damage":123},

 {"id":3,"name":"绝对零度","damage",90},

 {"id":4,"name":"咫尺天涯","damage":400}

]


使用litjson进行解析json文本

两种方法引入litjson

1.去litjson的网站下载litjson.dll 然后添加引用 找到dll所在目录

2.右键引用 打开管理netget程序包,在联机里面搜索litjson 在搜索结果中选择一个 进行安装

使用JsonMapper去解析json文本

//jsondata代表一个数组或者一个对象

JsonData jsonData=JsonMapper.ToObject(File.ReadAllText("json技能信息.txt"));  //jsonData代表一个数组

foreach(JsonData temp in jsonData)          //temp代表一个对象

{

     JsonData idvalue= temp["id"] //通过字符串索引器可以取得键值对的值

     JsonData namevalue=temp["name"];

    JsonData damagvalue=temp["damage"];

    int id=Int32.Parse(idvalue.ToString());

    int damage=Int32.Parse(damagevalue.ToString());

    Debug.Log("id:"+id+"name"+namevalue.ToString()+"damage"+damage);

}


使用泛型解析json

//json里面对象的键必须跟定义的类里面的字段或者属性保持一致

Skill[] skillArray=JsonMapper.ToObject<Skill[]>(File.ReadAllText("json技能信息.txt"));

foreach(Skill temp in skillArray)

{

  Debug.Log(temp);

}


List<Skill> skillList=JsonMapper.ToObject<List<Skill>>(File.ReadAllText("json技能信息.txt"));  可以用数组的地方都可以用List代替


创建一个类,这个类中的属性和字段必须和json里头的键保持一致,才能用泛型


将一个对象转化成一个json文档

Player p=new Player();

p.Name="jie";

p.Age=100;

p.Level=99;

string json=JsonMapper.ToJson(p)


Json校验+Json在线编辑器

bejson 搜索




Excel操作:

using System.Data.OleDb;

String fileName="装备信息.xls";

string connectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+"Data Source=" + fileName + ";"+";Extended Properties=\"Excel8.0;HDR=YES;IMEX=1\"";

//1.创建连接到数据源的对象

OleDbConnection connection = new OleDbConnection(connectionString);

//打开连接

connection.Open();

string sql="select * from [Sheet1$]"; 这个是一个查询命令

OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connection);  做查询


DataSet dataSet = new DataSet();  用来存放数据 用来存放Data Table


adapter.Fill(dataSet);  表示把查询的结果(datatable)放到(填充)dataset里面

connection.Close(); 释放连接资源


//取得数据

DataTableCollection tableCollection=dataSet.Tables;   //获取当前集合中所有的表格


Data Table table = tableCollection[0];因为我们只往dataset里面放置了一张表格,所以这里取得索引为0的表格就是我们刚刚查询的表格

//取得表格中的数据

//取得table中所有的行

DataRowCollection rowCollection = table.Rows; 返回了一个行的集合


//遍历行的集合,取得每一行的datarow对象

foreach(DataRow row in rowCollection)

{

    //取得row中前8列的数据,索引0-17

    for(int i=0;i<8;i++)

   {

      Debug.Log(row[i]+" ");

   }

}

 


原创粉丝点击