第十三章 文件和注册表操作.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第15章 文件处理技术 变量和数组只能临时存储数据,且数据量很小, 当应用程序终止,数据就会丢失。如果需要将数 据长期存储或者存储大量数据,就需要用到文件。 文件维护的数据通常称为持久数据,存储在计算 机的辅助存储设备中,如磁盘、光盘等。许多程 序都要与外部数据进行交互,如数据库、XML,甚 至文本文件,因此文件操作是软件开发中必不可.
项目6 通用堆栈.
檔案處理.
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
類別與物件 Class & Object.
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
Java语言程序设计 清华大学出版社 第9章 网络通信.
C#程序设计 c# programming 泛型 C#程序设计课程组.
第八章 C#高级编程.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
第四章 在 C# 中实现 OOP 概念.
例外處理(Exception Handling)
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
C# 的 Web 相關物件之使用 日期 : 2018/11/21.
第14章 建立網路應用程式 14-1 瀏覽器的建立 14-2 檔案下載器 14-3 寄送電子郵件 14-4 檢查POP 3的電子郵件.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
本單元介紹何謂變數,及說明變數的宣告方式。
C#程序设计 c# programming 网络编程 C#程序设计课程组.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
抽象类 File类 String类 StringBuffer类
基于 C# 的 .NET Framework 程序设计
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
Java语言程序设计 第五部分 Java异常处理.
第14章 伺服器檔案、電子郵件處理與Ajax 14-1 資料夾與檔案操作 14-2 文字檔案的讀寫 14-3 電子郵件與附檔處理
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
C#面向对象程序设计 $7 继承和多态性.
文件流. 文件流 文件流 Stream FileStream BufferedStream MemoryStream NetworkStream …… 所有流的抽象 Stream FileStream BufferedStream MemoryStream NetworkStream ……
第7章 Web伺服器檔案與XML文件的處理 7-1 System.IO名稱空間的基礎 7-2 伺服器的資料夾與檔案操作
第5章 .NET框架类 5.
視窗程式設計 (Windows Programming)
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
檔案讀寫與例外處理 (File IO and Exception Handling)
$16 进程和线程. $16 进程和线程 进程 进程 属性 ProcessName / Id MachineName / MainModule BasePriority StartTime / ExitTime TotalProcessorTime / UserProcessorTime PrivateMemorySize64.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第 十二 章 C# 中的文件处理.
异常及处理.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
C#程序设计基础 第二章 数据类型.
第六章 属性、索引器、委托和事件.
P2P聊天工具.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
第三章 C# 基础知识.
第 14 章 輸出與輸入.
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
辅导课程八.
第二章 Java基本语法 讲师:复凡.
$15 文件操作. $15 文件操作 主要内容 文件系统概述 驱动器、目录和文件 文件流和数据流 自定义IO操作.
C#程序设计基础 $3 成员、变量和常量.
第二章 Java基本语法 讲师:复凡.
第二章 Java语法基础.
Review 1~3.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
Presentation transcript:

第十三章 文件和注册表操作

目标 了解System.IO 命名空间 掌握读写文本文件的方法 掌握向文件读写二进制数据的方法 掌握读写内存流的方法 掌握注册表的操作方法

System.IO 命名空间 3-1 File对象 静态方法 Move Delete Copy CreateText OpenText

System.IO 命名空间 3-2 试一试: 把C:\WinNT\Win.INI文件拷贝到C:\下的代码,怎么写?

System.IO 命名空间 3-3 FileInfo类和File类 两者都提供对文件类似的操作 FileInfo不是静态对象

读写文本文件 3-1 System.IO 命名空间 File 类 FileStream 类 继承类 静态方法 CreateText(string FilePath) OpenText(string FilePath) Open(string FilePath, FileMode) Create(string FilePath) OpenRead(string FilePath) AppendText(string FilePath) 继承类 FileStream 类

在构造函数中使用的 FileMode、FileAccess 和 FileShare 参数都是 enum 类型 读写文本文件 3-2 FileStream 构造函数 FileStream 已重写构造函数 FileStream(string FilePath, FileMode) FileStream(string FilePath, FileMode, FileAccess) FileStream(string FilePath, FileMode, FileAccess, FileShare) 在构造函数中使用的 FileMode、FileAccess 和 FileShare 参数都是 enum 类型

FileMode 和FileShare ………… Append Create CreateNew Open OpenOrCreate Truncate FileShare None Read Write ReadWrite ………… FileStream fstream = new FileStream("Test.cs", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); ………

文件读写例子 4-1

将转换后的Byte数组写入新建的文本文件 FileStream fs; try { fs = File.Create(txtFileName.Text); } catch MessageBox.Show("建立文件时出错。","错误", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); return; byte[] content = new UTF8Encoding(true).GetBytes(txtContent.Text); fs.Write(content, 0, content.Length); fs.Flush(); MessageBox.Show("保存成功", "保存", System.Windows.Forms.MessageBoxIcon.Information); MessageBox.Show("写入文件时出错。","错误", System.Windows.Forms.MessageBoxButtons.OK, finally fs.Close(); 文件读写例子4-2 创建文件 将转换后的Byte数组写入新建的文本文件

文件读写例子 4-3 检查文件是否存在 打开文件流 class FileReadDemo { public static void Main() string path; Console.WriteLine ( "输入要读取的文件名。指定带路径的完整名称:"); path = Console.ReadLine (); try if (!File.Exists(path)) Console.WriteLine("文件不存在"); } else // 打开流以进行读取。 FileStream fs = File.OpenRead(path); 检查文件是否存在 打开文件流

文件读写例子 4-4 FileStream.Read() 用于从指定文件读取数据 //创建一个 byte 数组以读取数据 byte[] arr = new byte[100]; UTF8Encoding data = new UTF8Encoding(true); //继续读文件直到读取文件中的所有数据 while (fs.Read(arr,0,arr.Length) > 0) { Console.WriteLine(data.GetString(arr)); } catch(Exception ex) Console.WriteLine(“发生错误:" + ex.Message); FileStream.Read() 用于从指定文件读取数据

读写二进制文件 要使用 BinaryReader 和 BinaryWriter 类 这两个对象都需要在FileStream上创建 FileStream filestream = new FileStream(Filename, FileMode.Create); BinaryWriter objBinaryWriter = new BinaryWriter(filestream);

二进制文件读写对象 BinaryReader BinaryWriter Close() Read() ReadDecimal() ReadByte() ReadInt16() ReadInt32() ReadString() Close() Flush() Write()

关闭 FileStream 和 BinaryWriter 写二进制文件 public static void Main(String[] args) { Console.WriteLine("输入文件名:"); string Filename = Console.ReadLine(); FileStream filestream = new FileStream(Filename, FileMode.Create); BinaryWriter objBinaryWriter = new BinaryWriter(filestream); for (int index = 0; index < 20; index++) objBinaryWriter.Write((int) index); } Console.WriteLine("\二进制数据已写入文件"); objBinaryWriter.Close(); filestream.Close(); 创建FileStream 实例 创建BinaryWriter实例 写数据 关闭 FileStream 和 BinaryWriter

FileStream 和 BinaryReader 的实例 public static void Main(String[] args) { Console.WriteLine("输入文件名:"); string file = Console.ReadLine(); if (!File.Exists (file)) Console.WriteLine("文件不存在!"); } else FileStream filestream = new FileStream(file, FileMode.Open, FileAccess.Read); BinaryReader objBinaryReader = new BinaryReader(filestream); try while(true) Console.WriteLine(objBinaryReader.ReadInt32()); catch(EndOfStreamException eof) Console.WriteLine(“已到文件末尾"); 读二进制文件 FileStream 和 BinaryReader 的实例 读信息

读写内存流 Stream 类 抽象类 MemoryStream BufferedStream 对内存而不是对磁盘进行数据读写 减少了对临时缓冲区和文件的需要 对缓冲区进行数据读写 允许操作系统创建自己的缓冲区 输入/输出效率高且速度更快 在网络通讯的时候经常会使用到

BufferedStream 构造函数 public BufferedStream(Stream StName); 默认缓冲区大小为 4096 public BufferedStream(Stream StName, int bsize); 缓冲区大小

Stream 和 BufferedStream 的实例 通过缓冲区交换数据 2-1 public static void Main( ) { Console.WriteLine (“请输入文件名:"); string name = Console.ReadLine(); Console.WriteLine (“请输入备份文件名:"); string backup = Console.ReadLine(); if(File.Exists(name)) Stream inputStream = File.OpenRead(name); Stream outputStream = File.OpenWrite(backup); BufferedStream bufferedInput =new BufferedStream(inputStream); BufferedStream bufferedOutput =new BufferedStream(outputStream); Stream 和 BufferedStream 的实例

通过缓冲区交换数据 2-2 通过缓冲区进行读写 刷新并关闭 BufferStream byte[] buffer = new Byte[sizeBuff]; int bytesRead; while ((bytesRead = bufferedInput.Read(buffer,0,sizeBuff)) > 0 ) { bufferedOutput.Write(buffer,0,bytesRead); } Console.WriteLine(); Console.WriteLine("给定备份的文件已创建"); bufferedOutput.Flush( ); bufferedInput.Close( ); bufferedOutput.Close( ); else Console.WriteLine ("文件不存在"); 通过缓冲区进行读写 刷新并关闭 BufferStream

示例应用程序 3-1 学生详细信息用户界面 学生文件存储信息用户界面 //声明变量 private FileStream fstream; private void btnSave_Click(object sender, System.EventArgs e) { //准备将文本写入文件 string data; data = txtFirstName.Text + " " + txtLastName.Text + " " +txtClass.Text; data += " " + txtGrade.Text +"\n"; Byte[ ] info = new UTF8Encoding(true).GetBytes(data); //写数据 fstream.Write(info, 0, info.Length); //刷新并关闭 FileStream fstream.Flush(); fstream.Close(); frmStudentFile objfrmStudentFile = new frmStudentFile(); objfrmStudentFile.Show(); } 学生详细信息用户界面 学生文件存储信息用户界面 //声明变量 private FileStream fstream; public frmStudentEntry() //Constructor构造函数 { InitializeComponent(); fstream = File.Create("C:\\Student.txt"); } 将数据写入文本文件 刷新并关闭 FileStream

创建读取数据的 FileStream 的实例 示例应用程序 3-2 private void frmStudentFile_Load(object sender, System.EventArgs e) { FileStream fstream = File.OpenRead("C:\\Student.txt"); long filesize = fstream.Length; //创建一个 byte 数组以读取数据 byte[] arr = new byte[filesize]; UTF8Encoding data = new UTF8Encoding(true); //将文件内容读入数组 fstream.Read(arr,0,arr.Length); //拆分数组以检索单个字段值 string text = data.GetString(arr); string delim = " "; char [ ] delimiter = delim.ToCharArray(); string [ ] split = null; for (int x = 1; x <= text.Length; x++) split = text.Split(delimiter, x); } 创建读取数据的 FileStream 的实例 读取并存储数据 将记录数组拆分成单个字段

示例应用程序 3-3 将数组的内容赋给窗体字段 //将值赋给窗体中的各个字段 lblFirstNameValue.Text = split[0]; lblLastNameValue.Text = split[1]; lblClassValue.Text = split[2]; lblGradeValue.Text = split[3]; } 将数组的内容赋给窗体字段

目录和路径操作 静态方法 Directory类 Move Delete Exists CreateDirectory GetFiles SetCurrentDirectory

目录和路径操作 实例方法 DirectoryInfo类 MoveTo Delete GetDirectories Create GetFiles

目录和路径操作 静态方法 Path类 GetDirectoryName GetFileName GetFullPath Combine GetExtension HasExtension

读写注册表2-1 .NET框架在Microsoft.Win32名字空间中提供了两个类来操作注册表:Registry和RegistryKey。这两个类都是密封类不允许被继承。 Registry类 提供了7个公共的静态域,分别代表7个基本主键(其中两个在XP系统中没有,在这就不介绍了)分别是:Registry.ClassesRoot,Registry.CurrentUser,Registry.LocalMachine,Registry.Users,Registry.CurrentConfig。

读写注册表2-2 RegistryKey类 RegistryKey类中提供了对注册表操作的方法。要注意的是操作注册表必须符合系统权限,否则将会抛出错误。

创建子键 public RegistryKey CreateSubKey(string sunbkey); 参数sunbkey表示要创建的子键的名称或路径名。创建成功返回被创建的子键,否则返回null

打开子键 方法: public RegistryKey penSubKey(string name); public RegistryKey penSubKey(string name,bool writable); 参数name表示要打开的子键名或其路径名,参数writable表示被打开的子键是否允许被修改,前一个方法打开的子键是只读的。 Microsoft.Win32类还为我们提供了另一个方法,用于打开远程计算机上的注册表,方法原型为:  public static RegistryKey OpenRemoteBaseKey(RegistryHive hKey,string machineName);

删除子键 public void DeleteKey(string subkey); 该方法用于删除指定的主键。如果要删除的子键还包含主键则删除失败,并返回一个异常,如果要彻底删除该子键极其目录下的子键可以用方法DeleteSubKeyTree,该方法原型如下:  public void DeleteKeyTree(string subkey);

读取键值 public object GetValue(string name); public object GetValue(string name,object defaultValue); 参数name表示键的名称,返回类型是一个object类型,如果指定的键不存在则返回null。如果失败又不希望返回的值是null则可以指定参数defaultValue,指定了参数则在读取失败的情况下返回该参数指定的值。

设置键值 public object SetValue(string name,object value);

程序示例 using Microsoft.Win32; using System.Diagnostics; private void Access_Registry() {    // 在HKEY_LOCAL_MACHINE\Software下建立一新键,起名为MCBInc    RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);    // 增加一个子键    RegistryKey newkey = key.CreateSubKey("MCBInc");    // 设置此子键的值    newkey.SetValue("MCBInc", "NET Developer");    // 从注册表的其他地方获取数据    // 找出你的CPU    RegistryKey pRegKey = Registry.LocalMachine;    pRegKey = pRegKey.OpenSubKey("HARDWARE\\DESCRIPTION \\System\\CentralProcessor\\0");    Object val = pRegKey.GetValue("VendorIdentifier");    Debug.WriteLine("The central processor of this machine is:"+ val);    // 删除键值    RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software", true);    delKey.DeleteSubKey("MCBInc"); } 程序示例

总结 File是静态对象,提供对文件的创建、拷贝、移动和删除等一系列操作 FileStream 和BinaryReader、BinaryWriter对象结合起来可对二进制数据进行操作 在C#中指明文件名的时候,要使用转义字符“\\” 内存流提供无法调整大小的数据流视图,而且只能向其写入 BufferedStream对象对缓冲区进行读写