30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
一:泛型
关于泛型我自己也不是很好的理解,但是具体的运用还是可以的,可以这样的理解,我们定义一个数组,但是不知道将来它是保存什么类型的值,很是矛盾,这个时候泛型就出现了,它可以解决这个场景,list<T> 以前这里是类型,前提是我们知道这里将来保存什么值,现在不知道了使用T(Type)来表示,将来什么类型的值都可以保存在里面。这个在集合,项目底层一些公共的接口,类之中使用的特别多。
二:集合
线型集合----List<T>

List<int> array = new List<int>();
int[] str = { 0, 0, 0, 0, };
array.Add(1);
array.Add(2);
array.Add(5);
array.AddRange(str); //这里是添加一个数组到集合中。
array.Remove(5); //这里是添加的是一个固定的数字。
array.RemoveAt(1); //这里的item就是我们数组的下标。我们可以利用这个删除元素。
array[0] = 23; //修改第一个元素
foreach (var item in array) //这里是关于集合的循环输出。
{
Console.WriteLine(item.ToString());
}
Console.ReadKey();
离散集合
Dictionary<string,int> dic=new Dictionary<string,int>();
Dictionary<string, string> dic = new Dictionary<string, string>();
//初始化
dic.Add("张辉", "1193451014");
dic.Add("ahui", "1193451014");
dic.Add("小辉", "1193451014");
dic.Add("王辉", "1193451014");
bool a=dic.ContainsKey("ahui"); //利用键来看是否在集合里面保存
Console.WriteLine(a);
//这个键值对集合---我们需要了解到如何循环的输出
foreach (KeyValuePair<string, string> item in dic) //输出的时候注意临时变量(item)的类型-----KeyValuePair<string, string>
{
Console.WriteLine(item.Key + "," + item.Value);
}
Console.ReadKey();
三:文件操作
文件是什么:是硬盘里面的一个内存,是一堆字节快。

1:命名空间
System.IO; //文件的命名空间
2:FileStream文件流,将文件以字节的方式进行读写。

上面的图片是关于文件的一些常用的方法和类。下面是一些练习。
--->FileStream文件流。
1:关于文件流的写。
我们看一FileStream有哪些方法。都是一些构造函数。

---->WriteByte()方法
//FileStream-----利用文件流来写,第一个参数是文件名,第二个是枚举类型,我们选择重新写入。第三个是权限的选择。
FileStream fWrite=new FileStream("ahui.txt",FileMode.Create,FileAccess.Write);
fWrite.WriteByte(97); //写入了,但是我们要是没有调用display或者Flush就不会写入文件,只是写入缓冲期。
//Flush()-----清除此流的缓冲区,使得所有缓冲的数据都写入到文件中。
fWrite.Flush(); //这样才能写入文件中。
Console.WriteLine(fWrite);
Console.ReadKey();
上面的代码要是我们从客户端输入就会出现乱码,我们需要通过设置编码的格式来修改。
----->Write()
Console.WriteLine("请输入?");
string sInput = Console.ReadLine();
//设置编码格式----有助于我们往文件中写入汉字
byte[] bs = Encoding.Default.GetBytes(sInput);
fWrite.Write(bs,0,5); //写入了,但是我们要是没有调用display或者Flush就不会写入文件,只是写入缓冲期。
---->ReadByte()
//利用using来写,这个最后会自动的调用Display()方法 ,使我们写在缓冲区的内容写入到文件中。
using (FileStream fRead=new FileStream("ahui.txt",FileMode.Open,FileAccess.Read))
{
List<byte> list=new List<byte>(); //设置一个集合
int res = -1;
while ((res=fRead.ReadByte( ))!=-1) //利用循环来把文件中的值添加到集合中
{
list.Add((byte)res); //集合的Add()方法。
}
}
Console.ReadKey();

这里的49和50是我文件中保存的值。
---->Read
using (FileStream fReader=new FileStream("ahui.txt",FileMode.Open,FileAccess.Read))
{
//使用数组来存储一个块字节
byte []bs=new byte[10]; //这个就相当于缓冲区一样
int count = fReader.Read(bs,0,bs.Length); //要求读取10个字节,从数组的第0位开始,全部存储完。
}

---->复制文件
//思路---------------先读取文件,后写入文件。
Console.Write("请输入你要复制的路径#");
string str = Console.ReadLine();
if (!File.Exists(str)) //判断文件是否存在
{
Console.WriteLine("文件不存在,,,你搞我呀,");
Console.ReadKey();
return; //直接跳出.
}
//走到这里就表示文件存在
Console.Write(" 请输入要往哪里复制#");
string strM = Console.ReadLine();
using (FileStream fReader=new FileStream(str,FileMode.Open,FileAccess.Read)) //进行读的操作
{
using (FileStream rWrite=new FileStream(strM,FileMode.Create,FileAccess.Write)) //进行写操作
{
//第一种------利用ReadByte()和WriteByte()按照字节来进行处理
int res = -1;
while ((res=fReader.ReadByte())!=-1) //这里看是否读取到值,是否进行循环,没读取到res=-1,则不进行写入操作。
{
rWrite.WriteByte((byte)res); //参数只能是byte类型的,我们需要强制类型转换。
}
}
}
Console.WriteLine("OK");
Console.ReadKey();


上面的效率不是很高,我们可以利用Read()/Write()来进行,效率比之前的高很多。
//第二种------利用Read()和Write()按照字节来进行处理
//这里利用的是buffer,我们需要一个字节数组来处理。
byte [] buBytes=new byte[1024*1024*10]; //申请了一个10M大小的空间。
int count = 0;
while ((count = fReader.Read(buBytes, 0, buBytes.Length)) > 0) //把读取到的内容写入到了buffer中,我们只要文件中有值,count就会大于0。
{
rWrite.Write(buBytes, 0, count); //把buffer中的值写入到文件中。
}
四:Encoding处理字符集。
声明一个字符编码,
Encoding en = Encoding.GetEncoding("gb2312"); //声明一个gb2312的字符编码
得到计算机中的所有字符编码
EncodingInfo[] ens = Encoding.GetEncodings(); //得到所有的编码 ,返回的是一个数组。+EncodingInfo是一个类,里面有一些关于编码的属性。
for (int i = 0; i <ens.Length ; i++)
{
Console.WriteLine("{0},{1},{2}",ens[i].CodePage,ens[i].DisplayName,ens[i].Name);
}
Console.ReadKey();
我们通过控制台可以看到PC中的所有的编码。

上面的代码中有注释,我们可以发现有些编码我们可以通过一个类来声明一个数组,这样就可以点 出来我们的所有的编码,其中有编码的编码数,编码名称,编码说明。
eg:将数字转换为16进制。
for (int i = 0; i < 17; i++)
{
Console.WriteLine(i.ToString("x2")); //这里面的x表示的是编码的格式为16进制。 2表示保留2位数。
}
Console.ReadKey();
五:关于继承被初识化的调用问题
子类继承基类,当子类被初始化的时候,我们是先调用基类的构造函数,在调用子类的构造函数,这里有个叫做回溯的问题。是从里到外的。
/// <summary>
/// 基类
/// </summary>
public class Parset
{
public Parset()
{
Console.WriteLine("基类被调用了。");
}
}
/// <summary>
/// 子类
/// </summary>
public class ChildA:Parset
{
private string name = "阿辉";
public ChildA()
{
Console.WriteLine("子类被调用了,,,");
} public void SayHello()
{
Console.WriteLine(name);
}
}
ChildA ca=new ChildA();
ca.SayHello();
Console.ReadKey();
我们通过这里就可以发现这个规则。

30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集的更多相关文章
- python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作
目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...
- File 文件操作类 大全
File 文件操作类 大全 许多人都会对文件操作感到很难 我也是 但是一个好的项目中必定会涉及到文件操作的 文件的复制 粘贴 等等等 公司大佬写了 一个文件操作的工具类 感觉还是棒棒的啦 ...
- Android的file文件操作详解
Android的file文件操作详解 android的文件操作要有权限: 判断SD卡是否插入 Environment.getExternalStorageState().equals( android ...
- [转]python file文件操作--内置对象open
python file文件操作--内置对象open 说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
- python学习笔记-(七)python基础--集合、文件操作&函数
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...
- Python 基础篇:字典、集合、文件操作
字典 字典一种key - value 的数据类型 1. 语法: info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe ...
- Python 函数基础、有序集合、文件操作(三)
一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...
- python基础(四)文件操作和集合
一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...
随机推荐
- Oracle expdp/impdp导出导入命令及数据库备份
使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...
- node(邮件发送特性)
1.安装 npm install nodemailer https://github.com/andris9/Nodemailer 2.配置发邮件的账户开启SMTP功能: 3.程序样例如下: var ...
- Java设计模式6:策略模式
策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包 ...
- 【C语言学习】《C Primer Plus》第5章 运算符、表达式和语句
学习总结 1.有了一定的语言基础,运算符和表达式这些都大同小异,无外乎赋值运算符(=).算术运算符(+.-.*./.%.++.——)和其他的一下运算符(sizeof.(type)). 2.声明一个参数 ...
- 解决你的开发烦恼——Aoite 开源前奏
Aoite(Any one item!) 一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案,敬请关注 Aoite GitHub. 介绍 本项目从2009年孵化(V-&g ...
- 运用DebugDiag诊断ASP.Net异常
Debug Diagnostic Tool (DebugDiag)是用来帮助诊断IIS/COM+等应用假死.性能差.内存泄露及碎片和崩溃等问题的工具. 本文介绍如何运用DebugDiag诊断特定的AS ...
- h5原生拖拽
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- atitit opencv apiattilax总结 约500个函数 .xlsx
atitit opencv apiattilax总结 约500个函数 .xlsx 1.1. CxCore中文参考手册 1 1.2. 机器学习中文参考手册 knn svm 1 1.3. CvAu ...
- salesforce 零基础开发入门学习(七)PickList的value值获取
之前介绍过PickList类型的声明以及赋值,但是如何取出呢?一个sObject对象可以理解为一条数据.通过sObject直接取恐怕很难做到,因为他只会显示一个值.这时候就要用到Schema命名空间中 ...
- 【WP 8.1开发】上下文菜单
在桌面系统中,别说是开发者,相信有资格考得过计算机一级的人都知道什么叫一下文菜单,或者叫右键菜单. 为了让操作更方便,在手机应用程序中,也应当有这样的菜单.上下文菜单之所以有”上下文“之说,是因为通常 ...