Microsoft Word - 新正文.doc

Size: px
Start display at page:

Download "Microsoft Word - 新正文.doc"

Transcription

1 第3章 第 3 文件处理技术 章 文件处理技术 System.IO 命名空间 文件流类 FileStream 文件读写例子 读写二进制文件 读写内存流 本章小结 本章重点介绍 Windows 应用程序在文件读写中涉及的 System.IO 命名空间和 File FileInfo FileStream BinaryReader BinaryWriter BufferedStream 等类 以及常用的方法 参数 属性 事 件 枚举等 了解 System.IO 命名空间 掌握读写文本文件的方法 掌握向文件读写二进制数据的方法 掌握读写内存流的方法 3.1 System.IO 命名空间 了解 System.IO 类和引用方式 了解 File 类的常用方法 了解 FileInfo 类的常用方法和主要属性 学习实现文件的复制方法 学习获取文件基本信息的方法

2 第3章 了解文件夹类 Directory 的常用方法 开发简易文本编辑器 文件处理技术 以字节形式向磁盘写入的数据通常称为字节流 比特流 存储在磁盘上的字节集合称为文件 在 Windows 应用程序中 经常会读取文件中的数据 也会把处理后的数据存放到文件中 这就需 要对外存上的文件进行输入/输出 I/O 处理 例如 一名财务人员将单位的工资报表进行保存 应用程序就会将数据以.xls 文件的形式保存到硬盘上 而另一位在家休假的员工想浏览旅游期间拍 摄的照片 应用程序就会读取存放在硬盘上的.bmp 文件 第三位员工要保留与好友的聊天记录 应用程序就会将会话文本以.txt 文件的形式保存到硬盘上 如图 3-1 所示 另存为.xls 文件 另存为.bmp 文件 另存为.txt 文件 图 文件应用举例 System.IO 类介绍.NET 2.0 环境下的软件系统开发已经把对文件的读写操作从底层转移到对类库的使用中 类库 结构中有一个 System.IO 命名空间 里面包含允许读写文件和数据流的类型以及提供基本文件和目 录支持的类型 一些常用的类如表 3-1 所示 表 3-1 System.IO 命名空间常用的类 类 说明 File 提供用于创建 复制 删除 移动和打开文件的静态方法 并协助创建 FileStream 对象 FileInfo 提供用于创建 复制 删除 移动和打开文件的实例方法 并且帮助创建 FileStream 对 象 无法继承此类 FileStream 公开以文件为主的 Stream 既支持同步读写操作 也支持异步读写操作 BinaryReader 用特定的编码将基元数据类型读作二进制值 95

3 96 C# WinForm 实践开发教程 续表 类 BinaryWriter BufferedStream Directory DirectoryInfo Path StreamReader StreamWriter FileSysWatcher 说明以二进制形式将基元类型写入流, 并支持用特定的编码写入字符串给另一流上的读写操作添加一个缓冲层 无法继承此类公开用于创建 移动和枚举目录和子目录的静态方法 无法继承此类公开用于创建 移动和枚举目录和子目录的实例方法 无法继承此类对包含文件或目录路径信息的 String 实例执行操作 这些操作是以跨平台的方式执行的实现一个 TextReader, 使其以一种特定的编码从字节流中读取字符实现一个 TextWriter, 使其以一种特定的编码向字节流中写入字符侦听文件系统更改通知, 并在目录或目录中的文件发生更改时引发事件 这些类的结构如图 3-2 所示 图 3-2 System.IO 命名空间的类结构图 此外还有几个常作为参数的枚举, 如表 3-2 所示 表 3-2 System.IO 命名空间常用的枚举 枚举 说明 FileMode FileShare FileAccess 指定操作系统打开文件的方式 包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数 定义用于控制对文件的读访问 写访问或读 / 写访问的常数 小知识 :System.IO 命名空间的引用 第 1 章提到了 Using 语句的使用, 这里仍然建议使用 Using 来引用 System.IO 命名空间 若在代码页的头部引用了 System.IO 命名空间 using System.IO;

4 第 3 章文件处理技术 97 在代码中就可以随意使用其所包含的类及枚举了, 如 File.Creat(); 否则, 需要在代码处加上 System.IO 前缀, 例如 System.IO. File.Creat() 通过 MSDN 查看 System.IO 命名空间打开 MSDN, 选中 索引 标签, 在 查找 文本框内输入 System.IO, 在列表框中选中 System.IO 命名空间, 右侧主界面会显示类 枚举 委托 结构列表 单击 File 类, 就会看到关于 File 类的介绍, 以及语法 备注 示例 继承层次结构 线程安全 平台 版本信息 公共方法 参见等内容 通过这些帮助文档, 尤其是示例, 读者可以容易地掌握 File 类的使用 File 类的常用方法 利用 MSDN 就可以掌握类 File 的使用方法,File 类提供用于创建 复制 删除 移动和打开 文件的静态方法, 并协助创建 FileStream 对象 类 File 有几个常用方法, 如表 3-3 所示 表 3-3 类 File 的常用方法 方法 Move Delete Copy CreateText OpenText Open 说明将指定文件移到新位置, 并提供指定新文件名的选项删除指定的文件 如果指定的文件不存在, 则不引发异常已重载 将现有文件复制到新文件创建或打开一个文件用于写入 UTF-8 编码的文本打开现有 UTF-8 编码文本文件以进行读取已重载 打开指定路径上的 FileStream 案例学习 : 了解 File 类的一些主要方法 下面的示例演示了 File 类的一些主要方法 using System; using System.IO; class Test public static void Main() string path=@"c:\temp\mytest.txt"; if (!File.Exists(path)) // 创建文件以便写入内容 using (StreamWriter sw=file.createtext(path)) sw.writeline("hello"); sw.writeline("and"); sw.writeline("welcome"); // 打开文件, 从中读数据

5 98 C# WinForm 实践开发教程 using (StreamReader sr=file.opentext(path)) string s=""; while ((s=sr.readline())!= null) Console.WriteLine(s); try string path2=path+"temp"; // 确认将要复制成的文件是否已经有同名的文件存在 File.Delete(path2); // 复制文件 File.Copy(path, path2); Console.WriteLine("0 was copied to 1.", path, path2); // 删除新生成的文件 File.Delete(path2); Console.WriteLine("0 was successfully deleted.", path2); catch (Exception e) Console.WriteLine("The process failed: 0", e.tostring()); FileInfo 类的常用方法 FileInfo 类提供创建 复制 删除 移动和打开文件的实例方法, 并且帮助创建 FileStream 对象 FileInfo 类无法继承 FileInfo 类有几个常用属性, 如表 3-4 所示 表 3-4 类 FileInfo 的常用属性属性说明 Attributes 获取或设置当前 FileSystemInfo 对象的 FileAttributes 属性 ( 从 FileSystemInfo 类继承 ) CreationTime 获取或设置当前 FileSystemInfo 对象的创建时间 ( 从 FileSystemInfo 类继承 ) Directory 获取父目录的实例 DirectoryName 获取表示目录的完整路径的字符串 Exists 已重写 获取指示文件是否存在的值 Extension 获取表示文件扩展名部分的字符串 ( 从 FileSystemInfo 类继承 ) 案例学习 : 了解 FileInfo 类的一些主要属性下面的示例演示了 FileInfo 类的一些主要属性

6 第 3 章文件处理技术 99 using System; using System.IO; class Test public static void Main() string filename="c:\\autoexec.bat"; FileInfo fileinfo=new FileInfo(fileName); if (!fileinfo.exists) return; Console.WriteLine("0 has a directoryname of 1",fileName, fileinfo.directoryname); /* 下面是代码的处理结果, * 实际的结果因机器不同 : * * C:\autoexec.bat has a directoryname of C:\ */ 案例学习 : 实现文件的复制 本案例将解决同磁盘环境下文件复制的问题 如何编写将 C:\WinNT\Win.INI 文件复制到 C:\ 下的代码呢? (1) 向一个 Form 窗体上拖曳 3 个 Button 控件, 控件的 text 属性分别设置为 复制文本文件 创建文本文件 删除文本文件, 如图 3-3 所示 图 3-3 文件操作界面 (2) 双击 复制文本文件 创建文本文件 删除文本文件 按钮, 在 click 事件处理方法 中分别添加代码如下 : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication

7 100 C# WinForm 实践开发教程 public partial class Form1 : Form public Form1() InitializeComponent(); /// 复制文本文件 private void button1_click(object sender, EventArgs e) string somefile=@"c:\documents and Settings\Administrator\My Documents\SQL Server2000 安装故障.txt"; string target=@"c:\2.txt"; if (!File.Exists(somefile)) MessageBox.Show(" 文件不存在!"); else if (File.Exists(target)) File.Delete(target); File.Copy(somefile, target); MessageBox.Show(" 文件复制成功!"); /// 创建文本文件 private void button2_click(object sender, EventArgs e) string target=@"c:\2.txt"; if (File.Exists(target)) File.Delete(target); File.CreateText(target); /// 删除文本文件 private void button3_click(object sender, EventArgs e) string target=@"c:\2.txt";

8 第 3 章文件处理技术 101 if (File.Exists(target)) File.Delete(target); MessageBox.Show(" 文件删除成功!"); 问题讨论 刚才的实验是通过 File 类实现的, 那么如何通过更换 FileInfo 类执行同样的复制动作呢? 请将 button1_click 的代码替换为下列代码试试 : private void button1_click(object sender, EventArgs e) string path=@"c:\windows\ie4 Error Log.txt"; string target=@"c:\1.txt"; FileInfo myfile=new FileInfo(path); if (!myfile.exists) MessageBox.Show(" 对不起, 未发现路径文件!"); else myfile.copyto(target); MessageBox.Show(" 复制成功!"); 案例学习 : 获取文件基本信息 本案例将解决如何显示文件的基本信息问题 (1) 向一个 Form 窗体上拖曳 3 个 Lable 控件和一个 Button 控件,Button 控件的 text 属性设 置为 获取文件信息, 如图 3-4 所示 图 3-4 获取文件信息界面 (2) 双击 获取文件信息 按钮, 在 click 事件处理方法中分别添加代码如下 : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;

9 102 C# WinForm 实践开发教程 using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form2 : Form public Form2() InitializeComponent(); /// 获取文件信息单击事件 private void button1_click(object sender, EventArgs e) string somefile=@"c:\documents and Settings\Administrator\My Documents\SQL Server2000 安装故障.txt"; FileInfo myfile=new FileInfo(somefile); if (myfile.exists) MessageBox.Show(" 文件已经存在 "); label1.text=" 文件创建时间 :"+myfile.creationtime.tostring(); label2.text=" 文件夹 :"+myfile.directory.tostring(); label3.text=" 文件夹名称 :"+myfile.directoryname.tostring()+", 文件扩展名 :"+myfile.extension.tostring(); else MessageBox.Show(" 文件并不存在 "); 问题讨论 FileInfo 类和 File 类都可以实现上述操作, 它们的方法也都非常相似, 那么它们到底有什么区别呢? File 为静态类, 可直接使用 ;FileInfo 需要实例化后才能使用 从性能上考虑, 如果要多次操作文件, 不管是否针对相同文件, 则应使用 FileInfo 每次通过 File 类调用某个方法时, 都要占用一定的 CPU, 而 FileInfo 类只在创建 FileInfo 对象时执行一次安全检查

10 第 3 章文件处理技术 文件夹类 Directory 的常用方法 Directory 类公开用于创建 移动和枚举通过目录和子目录的静态方法 Directory 类无法继承 此类 Directory 类有几个常用的静态方法, 如表 3-5 所示 表 3-5 Directory 类的常用方法 方法 说明 Move Delete CreateDirectory GetCreationTime GetCurrentDirectory GetFiles 将文件或目录及其内容移到新位置已重载 删除指定的目录已重载 创建指定路径中的所有目录获取目录的创建日期和时间获取应用程序的当前工作目录已重载 返回指定目录中的文件的名称 案例学习 : 了解 Directory 类的一些主要方法 下面的示例演示了 Directory 类的一些主要方法 using System; using System.IO; class Test public static void Main() try // 获取当前目录的创建时间 DateTime dt=directory.getcreationtime(environment.currentdirectory); // 给用户反馈信息 if (DateTime.Now.Subtract(dt).TotalDays > 364) Console.WriteLine("This directory is over a year old."); else if (DateTime.Now.Subtract(dt).TotalDays > 30) Console.WriteLine("This directory is over a month old."); else if (DateTime.Now.Subtract(dt).TotalDays <= 1) Console.WriteLine("This directory is less than a day old."); else

11 104 C# WinForm 实践开发教程 Console.WriteLine("This directory was created on 0", dt); catch (Exception e) Console.WriteLine("The process failed: 0", e.tostring()); 案例学习 : 获取文件的基本物理磁盘信息本案例将引导学生掌握如何显示文件的基本物理磁盘信息 (1) 向一个 Form 窗体上拖曳五个 Button 控件, 其 text 属性分别设置为 创建目录 删除目录 移动目录 目录创建时间 返回指定目录文件, 如图 3-5 所示 图 3-5 操作界面 (2) 在 Form3 类里添加两个静态字段 directory_path directory_otherpath, 都为 String 类型, 分别代表工作目录路径和其他目录路径 ; 双击 创建目录 删除目录 移动目录 目录创建 时间 返回指定目录文件 按钮, 在 click 事件处理方法中分别添加代码如下 : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form3 : Form public Form3() InitializeComponent(); private static string directory_path="c:\\qs250"; private static string directory_otherpath="c:\\qqqq"; /// 创建目录 按钮鼠标单击事件

12 第 3 章文件处理技术 105 private void button1_click(object sender, EventArgs e) try Directory.CreateDirectory(directory_path); button2.enabled=true; button1.enabled=false; button3.enabled=true; button4.enabled=true; button5.enabled=true; MessageBox.Show(" 文件夹成功建立 ", " 警报 "); catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); /// 删除目录 按钮鼠标单击事件 private void button2_click(object sender, EventArgs e) try Directory.Delete(directory_path); button2.enabled=false; button1.enabled=true; button3.enabled=false; button4.enabled=false; button5.enabled=false; MessageBox.Show(" 文件夹删除建立 ", " 警报 "); catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); /// 移动目录 按钮鼠标单击事件 private void button3_click(object sender, EventArgs e) try Directory.Move(directory_path, directory_otherpath);

13 106 C# WinForm 实践开发教程 MessageBox.Show(" 文件夹移动成功 ", " 警报 "); // 例如, 如果尝试将 C:\mydir 移到 C:\public, 并且 C:\public 已存在 // 则此方法引发 IOException 必须将 C:\\public\\mydir 指定为 destdirname // 参数, 或者指定新目录名, 例如 C:\newdir catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); /// 目录创建时间 按钮鼠标单击事件 private void button4_click(object sender, EventArgs e) try MessageBox.Show(string.Format("0:G",Directory.GetCreationTime (directory_path)), " 提示 "); // 获取时间格式方法参见 DateTimeFormatInfo catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); /// 返回指定目录文件 按钮鼠标单击事件 private void button5_click(object sender, EventArgs e) try string[] fileentries=directory.getfiles(directory_path); if (fileentries.length!= 0) foreach (string s in fileentries) if (File.Exists(s)) MessageBox.Show(" 内有文件信息 :"+s, " 提示 "); else

14 第 3 章文件处理技术 107 MessageBox.Show(" 空文件夹 ", " 提示 "); // 获取时间格式方法参见 DateTimeFormatInfo catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); File 类的常用操作的静态方法练习 文本文件是我们接触频繁的一类文件, 记事本程序经常操作的文件就是文本文件, 很多应用程序会保存一些记录到日志文件里, 这种日志文件也可以是文本文件 通过本节的学习, 读者可以掌握对文本文件的简单读写 上节在介绍 System.IO 命名空间时, 重点介绍了 File 类, 本节将继续讨论 File 类 File 类是一个静态类, 不能被继承 它不仅提供一系列方法, 用来针对文件的通用操作, 还提供了一系列的读写文本文件的方法, 如表 3-6 所示 表 3-6 File 类的读写文本文件方法 方法 CreateText(string FilePath) OpenText(string FilePath) Open(string FilePath, FileMode) Create(string FilePath) OpenRead(string FilePath) AppendText(string FilePath) 说明创建或打开一个文件, 用于写入 UTF-8 编码的文本打开现有 UTF-8 编码文本文件以进行读取打开指定路径上的 FileStream, 具有读 / 写访问权限在指定路径中创建文件打开现有文件以进行读取创建一个 StreamWriter, 它将 UTF-8 编码文本追加到现有文件 小知识 :UTF-8 编码 UTF-8 是 UNICODE 八位交换格式 的简称,UNICODE 是国际标准, 也是 ISO 的等价标准 在 UNICODE 编码的文件中可以同时对几乎所有地球上已知的文字字符进行书写和表示, 而且已经是 UNIX/Linux 的默认编码标准 在中国大陆常用的 GB2312/GB18030/GBK 系列标准是中国的国家标准, 但只能对中文和多数西方文字进行编码 为了保证网站的通用性,UTF-8 编码是更好的选择 案例学习 : 简易文本编辑器的开发案例 本实验是对文本文件操作的综合练习, 读者将在实验中逐渐熟悉并掌握对文本文件的操作技能 (1) 向一个 Form 窗体上拖曳两个 GroupBox 控件,text 属性分别设置为 写入文本 命名 文本文件 : ; 向两个 GroupBox 控件里拖曳一个 RichTextBox 控件和一个 TextBox 控件 ; 向第一个 GroupBox 控件中拖曳两个 Button 控件, 属性分别设置为 保存编辑文件 打开文本文件 ; 向

15 108 C# WinForm 实践开发教程 第二个 GroupBox 控件中拖曳一个 Button 控件,text 属性设置为 创建文本文件, 如图 3-6 所示 图 3-6 简易文本编辑器界面 (2) 在案例中添加一个静态字段 directory_path,string 类型, 代表工作目录路径 ; 双击 保存 编辑文件 打开文本文件 创建文本文件 按钮, 在 click 事件处理方法中分别添加代码如下 : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form4 : Form public Form4() InitializeComponent(); private static string directory_path="c:\\"; /// 创建文本文件 private void button1_click(object sender, EventArgs e) try if (textbox1.text.length==0)

16 第 3 章文件处理技术 109 MessageBox.Show(" 文件名禁止为空!", " 警报 "); else directory_path=directory_path+textbox1.text.trim()+".txt"; //File.CreateText(..) 返回的是一个 StreamWriter StreamWriter sw=file.createtext(directory_path); button2.enabled=true; button3.enabled=true; button1.enabled=false; richtextbox1.enabled=true; MessageBox.Show(" 文件文件成功建立 ", " 消息 "); sw.close(); catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); /// 打开文本文件 private void button2_click(object sender, EventArgs e) try OpenFileDialog open=new OpenFileDialog();// 创建一个打开的对话框 open.title=" 打开文本文件 "; open.filename=""; open.addextension=true;// 设置是否自动在文件中添加扩展名 open.checkfileexists=true;// 检查文件是否存在 open.checkpathexists=true;// 验证路径有效性 open.filter=" 文本文件 (*.txt) *.txt";// 设置将打开文件的类型 open.validatenames=true; // 文件有效性验证 ValidateNames, 验证用户输入是否是一个有效的 Windows 文件名 if (open.showdialog()==dialogresult.ok) StreamReader sr=new StreamReader(open.FileName, System.Text.Encoding.Default); this.richtextbox1.text=sr.readtoend(); MessageBox.Show(" 文件打开成功 ", " 消息 "); catch (Exception mm)

17 110 C# WinForm 实践开发教程 MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); /// 保存编辑文件 private void button3_click(object sender, EventArgs e) try FileStream textfile=file.open(directory_path, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw=new StreamWriter(textfile, Encoding. GetEncoding("GB2312")); sw.write(richtextbox1.text.tostring()); MessageBox.Show(" 文件写成功 ", " 警报 "); catch (Exception mm) MessageBox.Show(" 磁盘操作错误, 原因 :"+Convert.ToString(mm), " 警报 "); 3.2 文件流类 FileStream 了解 FileStream 文件流类的特点 掌握 FileStream 文件流类的创建方法 了解 FileMode FileAccess 和 FileShare 方法的基本介绍及注意事项用 File 类提供的方法在创建或打开文件时, 总会产生一个 FileStream 对象 FileStream 类是一个什么样的类? 怎样通过它的对象完成对文件的操作呢? 1.FileStream 文件流类简介 FileStream 对象也称为文件流对象, 它为文件的读写操作提供通道, 而 File 对象相当于提供一个文件句柄 在文件操作中, 针对 FileStream 对象的操作必须首先实例化一个 FileStream 类对象后才可以进行, 这一点与 File 类的操作是不一样的 FileStream 类在实例化后可以用于读写文件中的数据, 而要构造 FileStream 实例, 需要以下 4 条信息 :

18 第 3 章文件处理技术 111 (1) 要访问的文件 (2) 表示如何打开文件的模式 例如, 创建一个新文件或打开一个现有的文件 如果打开一 个现有的文件, 写入操作是覆盖文件原来的内容, 还是添加到文件的末尾? (3) 表示访问文件的方式 只读 只写, 还是读写? (4) 共享访问 表示是否独占访问文件 如果允许其他流同时访问文件, 则这些流是只读 只写, 还是读写文件? 2.FileStream 文件流类的创建 创建 FileStream 对象的方法不是单一的, 除了使用 File 对象的 Create() 方法或 Open() 方法外, 也可以采用 FileStream 对象的构造函数 创建文件流对象的基本方法如下 : (1) 使用 File 对象的 Create 方法 FileStream mikecatstream; mikecatstream=file.create("c:\\mikecat.txt"); // 本段代码的含义 : // 利用类 File 的 Create() 方法在 C 盘根目录下创建文件 mikecat.txt, 并把文件流赋给 mikecatstream (2) 使用 File 对象的 Open 方法 FileStream mikecatstream; mikecatstream=file.open("c:\\mikecat.txt", FileMode.OpenOrCreate, FileAccess. Write); // 本段代码的含义 : // 利用类 File 的 Open() 方法打开在 C 盘根目录下的文件 mikecat.txt, 打开的模式为打开或创 // 建, 对文件的访问形式为只写, 并把文件流赋给 mikecatstream (3) 使用类 FileStream 的构造函数 FileStream mikecatstream; mikecatstream=new FileStream("c:\\mikecat.txt", FileMode.OpenOrCreate, FileAccess.Write); // 本段代码的含义 : // 利用类 FileStream 的构造函数打开在 C: 根目录下的文件 mikecat.txt, 打开的模式为打开或创 // 建, 对文件的访问形式为只写, 并把文件流赋给 mikecatstream FileStream 类的构造函数提供了 15 种重载函数, 最常用的有 3 种, 如表 3-7 所示 表 3-7 类 FileStream 的 3 种常用的构造函数 名称 FileStream(string FilePath, FileMode) FileStream(string FilePath, FileMode, FileAccess) FileStream(string FilePath, FileMode, FileAccess, FileShare) 说明 使用指定的路径和创建模式初始化 FileStream 类的新实例 使用指定的路径 创建模式和读 / 写权限初始化 FileStream 类的新实例 使用指定的路径 创建模式 读 / 写权限和共享权限创建 FileStream 类的新实例 在构造函数中使用的 FilePath FileMode FileAccess FileShare 分别是指使用指定的路径 创建模式 读 / 写权限和共享权限 其中 FilePath 为将封装的文件的相对路径或绝对路径 下面介绍 FileMode FileAccess 和 FileShare 它们 3 个都是 System.IO 命名空间中的枚举类型, 如表 3-8 所示

19 112 C# WinForm 实践开发教程 表 3-8 枚举类型 FileMode FileAccess 和 FileShare 名称取值说明 FileMode FileAccess FileShare 小实验 1 Append Create CreateNew Open OpenOrCreate 和 Truncate Read ReadWrite 和 Write Inheritable None Read ReadWrite 和 Write 指定操作系统打开文件的方式 定义用于控制对文件的读访问 写访问或读 / 写访问的常数 包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数 FileStream fstream=new FileStream("Test.cs", FileMode.OpenOrCreate, FileAccess. ReadWrite, FileShare.None); // 本段代码的含义 : // 利用 FileStream 类的构造函数打开当前目录下的文件 Test.cs, 打开的模式为打开或创建, 对文 // 件的访问形式为读写, 共享模式为拒绝共享, 并把文件流赋给 fstream 所示 小实验 2 FileStream s2=new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read); // 本段代码的含义 : // 利用 FileStream 类的构造函数打开当前目录下的文件名为字符串 name 的文件, 打开的模式为打 // 开, 对文件的访问形式为只读, 共享模式为读共享, 并把文件流赋给 s2 关于 FileMode FileAccess 和 FileShare 这 3 个枚举类型值的含义, 请参照表 3-9 至表 3-11 成员名称 Append Create 表 3-9 枚举类型 FileMode 枚举值的含义 说明 打开现有文件并查找到文件尾或创建新文件 FileMode.Append 只能同 FileAccess.Write 一起使用 任何读尝试都将失败并引发 ArgumentException 指定操作系统应创建新文件 如果文件已存在, 则将被改写 此操作要求 FileIOPermissionAccess.Write System.IO.FileMode.Create 等效于这样的请求 : 如果文件不存在, 则使用 CreateNew; 否则使用 Truncate CreateNew 指定操作系统应创建新文件 此操作需要 FileIOPermissionAccess.Write 如果文件已存在, 则将引发 IOException Open OpenOrCreate Truncate 指定操作系统应打开现有文件 打开文件的能力取决于 FileAccess 所指定的值 如果该文件不存在, 则引发 System.IO.FileNotFoundException 指定操作系统应打开文件 ( 如果文件存在 ); 否则应创建新文件 如果用 FileAccess.Read 打开文件, 则需要 FileIOPermissionAccess.Read 如果文件访问为 FileAccess.Write 或 FileAccess.ReadWrite, 则需要 FileIOPermissionAccess.Write 如果文件访问为 FileAccess.Append, 则需要 FileIOPermissionAccess.Append 指定操作系统应打开现有文件 文件一旦打开, 就将被截断为零字节大小 此操作需要 FileIOPermissionAccess.Write 试图从使用 Truncate 打开的文件中进行读取将导致异常

20 第 3 章文件处理技术 113 表 3-10 枚举类型 FileAccess 枚举值的含义 成员名称 Read ReadWrite Write 说明对文件的读访问 可从文件中读取数据 同 Write 组合即构成读写访问权对文件的读访问和写访问 可从文件读取数据和将数据写入文件文件的写访问 可将数据写入文件 同 Read 组合即构成读 / 写访问权 表 3-11 枚举类型 FileShare 枚举值的含义 成员名称 Delete Inheritable None Read ReadWrite Write 允许随后删除文件 说明 使文件句柄可由子进程继承 Win32 不直接支持此功能 谢绝共享当前文件 文件关闭前, 打开该文件的任何请求 ( 由此进程或另一进程发出的请求 ) 都将失败 允许随后打开文件读取 如果未指定此标志, 则文件关闭前, 任何打开该文件以进行读取的请求 ( 由此进程或另一进程发出的请求 ) 都将失败 但是, 即使指定了此标志, 仍可能需要附加权限才能够访问该文件 允许随后打开文件读取或写入 如果未指定此标志, 则文件关闭前, 任何打开该文件以进行读取或写入的请求 ( 由此进程或另一进程发出 ) 都将失败 但是, 即使指定了此标志, 仍可能需要附加权限才能够访问该文件 允许随后打开文件写入 如果未指定此标志, 则文件关闭前, 任何打开该文件以进行写入的请求 ( 由此进程或另一进过程发出的请求 ) 都将失败 但是, 即使指定了此标志, 仍可能需要附加权限才能够访问该文件 在打开文件产生文件流的时候, 三种枚举类型的不同枚举值作为参数会产生不同的操作效果, 具体应用应根据实际需要选择 注意 对于 FileMode, 如果要求的模式与文件的现有状态不一致, 就会抛出一个异常 如果文件不存在,Append Open 和 Truncate 会抛出一个异常, 如果文件存在,CreateNew 会抛出一个异常 Create 和 OpenOrCreate 可以处理这两种情况, 但 Create 会删除现有的文件, 创建一个新的空文件 FileAccess 和 FileShare 枚举是按位标志, 所以这些值可以与 C# 的按位 OR 运算符 合并使用 3.3 文件的读写 学习通过文件流 FileStream 打开文本文件 写入文本文件 设置文件属性 实施对文件的目录操作管理的基本方法 学习文件对话框的基本操作方法 学习通过文件流 FileStream 获取用户选择文件夹及文件的信息

21 114 C# WinForm 实践开发教程 学习通过文件流 FileStream 建立一个新的文本文件, 重新写文本信息流, 以及如何在 C# 中定义文件和文件夹 学习文件流的资源释放意义以及释放资源的基本顺序 学习如何针对文本文件进行复杂的编辑 综合查询 删除 插入等操作 掌握对文件读写的程序的编写方法案例学习 : 文件流 FileStream 综合案例 ( 一 ) 本次实验目标是通过一个如图 3-7 所示的窗体, 在单击相应按钮控件时, 可以完成对文件的读写操作 磁盘操作以及对目录的管理操作, 使读者快速掌握操作文件 目录的技术方法及 FileStream 类的应用 图 3-7 文件操作案例 1 界面图 (1) 图 3-7 所示, 从工具箱中拖曳五个 GroupBox 控件到 Form 窗体上,text 属性分别设置为 文件管理 读写文件操作 文件磁盘操作 设置文件属性 目录管理 向第一个 GroupBox 控件拖曳一个 RichTextBox 控件, 再向第一个 GroupBox 控件拖曳一个 Button 控件,text 属性设置为 关闭 ; 向第二个 GroupBox 控件拖曳一个 ComboBox 控件,text 属性设置为 写入类型选择 :,Items 属性中添加 创建空文本文件 添加入文本文件 新写入文本文件 ; 再向第二个 GroupBox 控件拖曳两个 Button 控件,text 属性分别设置为 写入文件 读出文件 ; 向第三个 GroupBox 控件拖曳一个 ComboBox 控件,text 属性设置为 文件磁盘操作选择 :,Items 属性中添加 文件创建 文件删除 文件复制 文件移动 ; 再向第三个 GroupBox 控件拖曳一个 Button 控件,text 属性设置为 文件磁盘操作 ; 向第四个 GroupBox 控件拖曳两个 CheckBox 控件,text 属性分别设置为 只读 隐藏 ; 再向第四个 GroupBox 控件拖曳一个 Button 控件,text 属性设置为 属性确认 ; 向第五个 GroupBox 控件拖曳一个 ComboBox 控件,text 属性设置为 文件目录操作选择 :,Items 属性中添加 创建文件夹 文件夹删除 文件夹移动 获取子文件信息 ; 再向第五个 GroupBox 控件拖曳一个 Button 控件,text 属性设置为 文件目录操作

22 第 3 章文件处理技术 115 (2) 双击所有 Button 控件, 进入.cs 文件编辑状态准备进行开发, 代码如下 : //========================= 第一部分 : 主界面功能设计 ============================= using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form6 : Form public Form6() InitializeComponent(); /// 读写文件操作 private void button3_click(object sender, EventArgs e) int p=combobox1.selectedindex; if (p==-1) MessageBox.Show(" 请您选择文件写入方式 ", " 警告信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); else string filecontent=richtextbox1.text.trim(); MyFileOption myoption=new MyFileOption(); string filepath=@"c:\1.txt"; bool i=myoption.writetextfile(filepath, filecontent, Convert.ToInt16 (combobox1.selectedindex)); if (i==true) MessageBox.Show(" 保存成功 ", " 保存信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show(" 写入文件时出错 ", " 错误 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);

23 116 C# WinForm 实践开发教程 /// 文件磁盘操作 private void button4_click(object sender, EventArgs e) Int16 p=convert.toint16(combobox2.selectedindex); if (p==-1) MessageBox.Show(" 请您选择磁盘文件操作方式 ", " 警告信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); else string sourcepath="c:\\1.txt"; string targetpath="c:\\2.txt"; MyFileOption myoption=new MyFileOption(); bool i=myoption.diskfileoption(sourcepath, targetpath, p); if (i==true) MessageBox.Show(" 磁盘文件操作成功 ", " 保存信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show(" 磁盘文件操作时出错 ", " 错误 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); private void button1_click(object sender, EventArgs e) richtextbox1.text=null; richtextbox1.focus(); /// 读出文本文件内容 private void button2_click(object sender, EventArgs e) MyFileOption myoption=new MyFileOption(); string Int16 i=0; string filecontent="";

24 第 3 章文件处理技术 117 myoption.readtextfile(filepath, out i, out filecontent); if (i==0) MessageBox.Show(filecontent, " 错误信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); richtextbox1.text=filecontent; else if (i==1) richtextbox1.text=filecontent; MessageBox.Show(" 读取文件成功 ", " 成功 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); else if (i==2) richtextbox1.text=filecontent; MessageBox.Show(filecontent, " 错误信息 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); /// 文件基本属性设置 private void button5_click(object sender, EventArgs e) string filepath=@"c:\1.txt"; if (checkbox1.checked && checkbox2.checked) File.SetAttributes(filepath, FileAttributes.ReadOnly FileAttributes.Hidden); MessageBox.Show(" 文件已经改为只读且隐藏 ", " 提示 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); else if (!checkbox1.checked &&!checkbox2.checked) File.SetAttributes(filepath, FileAttributes.Archive); MessageBox.Show(" 文件已经改为正常 ", " 提示 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); else if (checkbox2.checked) File.SetAttributes(filepath, FileAttributes.ReadOnly);

25 118 C# WinForm 实践开发教程 MessageBox.Show(" 文件已经改为只读 ", " 提示 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); if (checkbox1.checked) File.SetAttributes(filepath, FileAttributes.Hidden); MessageBox.Show(" 文件已经改为隐藏 ", " 提示 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); /// 文件夹操作 private void button6_click(object sender, EventArgs e) Int16 p=convert.toint16(combobox3.selectedindex); if (p==-1) MessageBox.Show(" 请您选择文件夹操作方式 ", " 警告信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); else string string MyFileOption myoption=new MyFileOption(); string[] filesname=null; bool i=myoption.directoryoption(sourcepath, targetpath, p, out filesname); if (i==true) MessageBox.Show(" 磁盘文件夹操作成功 ", " 保存信息 ", MessageBoxButtons.OK, MessageBoxIcon.Information); if (filesname!= null) foreach (string somestring in filesname) richtextbox1.text+= somestring+"\r\n"; else MessageBox.Show(" 磁盘文件夹操作时出错 ", " 错误 ",

26 第 3 章文件处理技术 119 MessageBoxButtons.OK, MessageBoxIcon.Warning); (3) 向项目中添加名为 FileOption.cs 的类文件, 并准备填写关于文件操作的各种方法, 如图 3-8 所示 图 3-8 建立 FileOption.cs (4) 向 FileOption.cs 文件中添加代码如下 : //============================== 第二部分 : 类设计 ============================ using System; using System.Collections.Generic; using System.Text; using System.IO; namespace FileOptionApplication class MyFileOption /******************************************************* ** 方法名 :WriteTextFile ** 输入参数 :filepath: 文件路径 ; ** filecontent: 写入文件的内容 ; ** WriteMethord: 写入方法 (0: 打开并创建文件 ;1: 添加文本 ;2: 新建文本 ) ** 输出参数 : 逻辑类型参数 ** 返回值 :bool ** 创建人 : 钱哨 ** 创建日期 : ** 描述 : 打开存放在某目录下的名称为 filepath 文件, 并在该文件中写入 filecontent *******************************************************/ public bool WriteTextFile(string filepath, string filecontent, Int16 WriteMethord) bool i=true; try if (WriteMethord==0)

27 120 C# WinForm 实践开发教程 FileStream textfile=file.open(filepath, FileMode.OpenOrCreate, FileAccess.Write); StreamWriter sw=new StreamWriter(textfile, Encoding.Default); sw.write(filecontent); i=true; sw.close(); textfile.close(); else if (WriteMethord==1) FileStream textfile=file.open(filepath, FileMode.Append, FileAccess.Write); StreamWriter sw=new StreamWriter(textfile, Encoding.Default); sw.write(filecontent); i=true; sw.close(); textfile.close(); else if (WriteMethord==2) FileStream textfile=file.open(filepath, FileMode.Create, FileAccess.Write); StreamWriter sw=new StreamWriter(textfile, Encoding.Default); sw.write(filecontent); i=true; sw.close(); textfile.close(); return i; catch i=false; return i; /******************************************************* ** 方法名 :DiskFileOption ** 输入参数 : SourcePath: 源文件路径 ; ** TargetPath: 目的文件路径 ; ** OptionMethord: 操作类别 ;0: 文件创建 ;1: 文件删除 ;2: 文件复制 ; 3: 文件移动 ** 输出参数 : 逻辑类型参数 ** 返回值 :bool ** 创建人 : 钱哨

28 第 3 章文件处理技术 121 ** 创建日期 : ** 描述 : 对磁盘文件进行基本操作 *******************************************************/ public bool DiskFileOption(string SourcePath, string TargetPath, Int16 OptionMethord) bool i=true; try if (OptionMethord==0) // 文件创建 FileStream textfile=file.create(sourcepath); textfile.close(); else if (OptionMethord==1) // 文件删除 File.Delete(SourcePath); else if (OptionMethord==2) // 文件复制 File.Copy(SourcePath, TargetPath, true); else if (OptionMethord==3) // 文件移动 File.Move(SourcePath,TargetPath); return i; catch i=false; return i; /******************************************************* ** 方法名 :ReadTextFile ** 输入参数 :filepath: 文件路径 ; ** 输出参数 :i: 读取类型 (1: 正常 ;2: 文件读取错误 ;3: 文件或路径无效 ); ** filecontent: 返回内容 ** 返回值 : 逻辑类型参数 ** 创建人 : 钱哨

29 122 C# WinForm 实践开发教程 ** 创建日期 : ** 描述 : 读取存放在某目录下的名称为 filepath 的文件的内容 *******************************************************/ public void ReadTextFile(string filepath, out Int16 i, out string filecontent) if (File.Exists(filepath)) try StreamReader textreader=new StreamReader(filepath, System.Text. Encoding.Default); filecontent=textreader.readtoend(); textreader.close(); i=1; catch i=2; filecontent=" 文件读取错误!"; else i=0; filecontent=" 文件或路径无效!"; /******************************************************* ** 方法名 :DirectoryOption ** 输入参数 :filepath: 文件路径 ; ** 输出参数 :i: 读取类型 (0: 创建文件夹 ;1: 文件夹删除 ;2: 文件夹移动 ;3: 获取文件夹下面所有的子文件信息 ) filecontent: 返回内容 ** 返回值 : 逻辑类型参数 ** 创建人 : 钱哨 ** 创建日期 : ** 描述 : 读取存放在某目录下的名称为 filepath 的文件的内容 *******************************************************/ public bool DirectoryOption(string Directorypath, string TargetDirectorypath, Int16 OptionMethord, out string[] filesname) bool k=true; filesname=null; if (Directory.Exists(Directorypath))

30 第 3 章文件处理技术 123 try if (OptionMethord==0) // 创建文件夹 Directory.CreateDirectory(Directorypath); else if (OptionMethord==1) // 文件夹删除 Directory.Delete(Directorypath, true); else if (OptionMethord==2) // 文件夹移动 Directory.Move(Directorypath, TargetDirectorypath); else if (OptionMethord==3) // 获取文件夹下面所有的子文件信息 filesname=directory.getfiles(directorypath); catch k=false; else Directory.CreateDirectory(Directorypath); k=true; return k; 案例学习 : 文件流 FileStream 综合案例 ( 二 ) 通过本案例, 读者应用掌握以下内容 : 如何通过用户选择文件夹获取文件夹信息 如何通过用户选择文件获取文件信息 如何通过文件流建立一个新的文本文件 如何打开文本文件后重新写文本信息流

31 124 C# WinForm 实践开发教程 如何在 C# 中定义文件和文件夹 文件流的资源释放意义以及释放资源的基本顺序 (1) 如图 3-9 所示, 从工具箱中拖曳三个 GroupBox 控件到 Form 窗体上,text 属性分别设置为 添加物理路径 打开文本文件 文本编辑区 ; 向第一个 GroupBox 控件拖曳一个 TextBox 控件, 再向第一个 GroupBox 控件拖曳一个 Button 控件,text 属性设置为 选定文件夹 ; 向第二个 GroupBox 控件拖曳一个 TextBox 控件, 再向第二个 GroupBox 控件拖曳一个 Button 控件,text 属性设置为 选定文件 ; 向第三个 GroupBox 控件拖曳一个 richtextbox 控件, 再向窗体上非 GroupBox 区域拖曳一个 Button 控件,text 属性设置为 保存文本文件 图 3-9 文件操作案例 2 界面 (2) 在类 Form11 里添加一个 int 类型字段 TypeW, 代表人为的操作类型 ; 双击所有 Button 控件, 进入.cs 文件编辑状态准备进行开发, 代码如下 : //================== 代码编辑 =========================================== using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form11 : Form public Form11()

32 第 3 章文件处理技术 125 InitializeComponent(); // 添加 int 类型变量 TypeW,0 为默认,1 为打开文件夹并建立 new.txt 文件,2 为打开文本文件 int TypeW=0; /// 选定某个文件夹 private void button1_click(object sender, EventArgs e) // 新建文件夹 FolderBrowserDialog openfolder=new FolderBrowserDialog(); if (openfolder.showdialog ()== DialogResult.OK) textbox1.text=convert.tostring(openfolder.selectedpath); TypeW=1; /// 选定某个文件夹下面的文本文件 private void button4_click(object sender, EventArgs e) OpenFileDialog openfile=new OpenFileDialog(); openfile.filter=" 文本文件 *.txt"; if (openfile.showdialog()==dialogresult.ok) FileStream OpenFileStream=new FileStream(openfile.FileName, FileMode.Open, FileAccess.Read); StreamReader sr=new StreamReader(OpenFileStream, Encoding.Default); richtextbox1.text=sr.readtoend(); textbox2.text=convert.tostring(openfile.filename); OpenFileStream.Close(); sr.close(); TypeW=2; /// 保存文本文件 private void button2_click(object sender, EventArgs e) if (richtextbox1.text==string.empty) MessageBox.Show(" 编辑文本文件内容禁止为空!", " 提示信息 "); return;

33 126 C# WinForm 实践开发教程 else if (TypeW==1) FileStream fs=new FileAccess.ReadWrite); StreamWriter sw=new StreamWriter(fs,Encoding.Default); sw.write(richtextbox1.text); TypeW=0; MessageBox.Show(" 已经成功地将文本文件写入 "+textbox1.text+"\\new.txt 之中 ", " 提示信息 "); // 注意 : 此处顺序绝不可调换, 为什么? 另外, 为什么必须关闭线程资源 sw.close(); fs.close(); else if(typew==2) FileStream fs=new FileStream(textBox2.Text, FileMode.OpenOrCreate, FileAccess. ReadWrite); StreamWriter sw=new StreamWriter(fs, Encoding.Default); sw.write(richtextbox1.text); TypeW=0; MessageBox.Show(" 已经成功的将文本文件写入 "+textbox2.text+" 之中 ", " 提示信息 "); // 注意 : 此处顺序绝不可调换, 为什么 sw.close(); fs.close(); 3.4 读写二进制文件 了解二进制文件读取器 / 编写器 学习建立 BinaryReader 类的一些主要方法 学习建立 BinaryWriter 类的一些主要方法 学习通过二进制读写操作进行图片的存储与复制 学习通过二进制读写操作实现图片文件与数据库 Image 类型数据的存储与读取在前面两节, 读写的文件都是文本文件, 这一节重点讲述二进制文件的读写 什么是二进制文件呢?

34 第 3 章文件处理技术 127 小知识 : 二进制文件 二进制文件即 Binary files 包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件 计算机文件基本上分为两种 : 二进制文件和 ASCII( 也称纯文本 ) 文件, 图形文件及文字处理程序等计算机程序都属于二进制文件 这些文件含有特殊的格式及计算机代码 ASCII 则是可以用任何文字处理程序阅读的简单文本文件 从本质上来说二进制文件和 ASCII 文件之间没有什么区别, 因为它们在硬盘上都以同样的的存放方式 二进制存放, 但是如果要对它们有所区分, 那可以这样理解 : 每个字符由一个或多个字节组成, 每个字节都是用 之间的部分数值来表示的, 也就是说, 之间还有一些数据没有对应任何字符的任何字节 如果一个文件中的每个字节的内容都是可以表示成字符的数据, 就可以称这个文件为文本文件 可见, 文本文件只是二进制文件中的一种特例, 为了与文本文件相区别, 人们又把除了文本文件以外的文件称为二进制文件 由于很难严格区分文本文件和二进制文件的概念, 所以我们可以简单地认为, 如果一个文件专门用于存储文本字符的数据, 没有包含字符以外的其他数据, 我们就称之为文本文件, 除此之外的文件就是二进制文件 二进制文件读取器 / 编写器介绍 在读写二进制文件时, 需要研究的读取器 / 编写器组是 BinaryReader 和 BinaryWriter, 它们都从 System.Object 直接派生 这些类型可以让我们从基层流中以简洁的二进制格式读取或写入离散数据类 型 BinaryWriter 类型定义了一个多次重载的 Write() 方法, 用于把数据类型写入基层的流 除了 Write() 方法,BinaryWriter 还提供了另外一些成员让我们能获取或设置从 Stream 派生的类型, 并且提供了随 机数据访问的支持 建立读取器 / 编写器 (BinaryReader 和 BinaryWriter) 需要注意的事项有两点 : 要使用 BinaryReader 和 BinaryWriter 类 这两个对象都需要在 FileStream 上创建 小实验 : 建立一个 BinaryWriter 对象 FileStream filestream=new FileStream(Filename, FileMode.Create); BinaryWriter objbinarywriter=new BinaryWriter(filestream); BinaryReader 类用特定的编码将基元数据类型读作二进制值 BinaryReader 类有几个常用的方 法, 如表 3-12 所示 表 3-12 BinaryReader 类的常用方法 方法 Close() Read() ReadDecimal() ReadByte() ReadInt16() ReadInt32() ReadString() 说明关闭当前阅读器及基础流已重载 从基础流中读取字符, 并提升流的当前位置从当前流中读取十进制数值, 并将该流的当前位置提升 16 个字节从当前流中读取下一个字节, 并使流的当前位置提升 1 个字节从当前流中读取 2 字节有符号整数, 并使流的当前位置提升 2 个字节从当前流中读取 4 字节有符号整数, 并使流的当前位置提升 4 个字节从当前流中读取一个字符串 字符串有长度前缀, 一次 7 位地被编码为整数 小实验 : 建立一个 BinaryReader 类的一些主要方法 using System;

35 128 C# WinForm 实践开发教程 using System.IO; class BinaryRW static void Main() int i=0; char[] invalidpathchars=path.invalidpathchars; MemoryStream memstream=new MemoryStream(); BinaryWriter binwriter=new BinaryWriter(memStream); // 写入内存 binwriter.write("invalid file path characters are: "); for (i=0; i<invalidpathchars.length; i++) binwriter.write(invalidpathchars[i]); // 用作生成编写器的内存流同样作为生成读取器的内存流 BinaryReader binreader=new BinaryReader(memStream); // 设置流的起点 memstream.position=0; // 从内存中读取数据, 并把数据写入控制台 Console.Write(binReader.ReadString()); char[] memorydata=new char[memstream.length - memstream.position]; for (i=0; i<memorydata.length; i++) memorydata[i]=convert.tochar(binreader.read()); Console.WriteLine(memoryData); BinaryWriter 类以二进制形式将基元类型写入流, 并支持用特定的编码写入字符串 BinaryWriter 类有几个常用的方法, 如表 3-13 所示 表 3-13 BinaryWriter 类的常用方法 方法 Close() Flush() Write() 说明关闭当前的 BinaryWriter 和基础流清理当前编写器的所有缓冲区, 使所有缓冲数据写入基础设备已重载 将值写入当前流 小实验 : 建立一个 BinaryWriter 类的一些主要方法 using System; using System.IO; class BinaryRW static void Main()

36 第 3 章文件处理技术 129 using (BinaryWriter binwriter=new BinaryWriter(File.Open(fileName, FileMode.Create))) binwriter.write(aspectratio); binwriter.write(lookupdir); binwriter.write(autosavetime); binwriter.write(showstatusbar); 写二进制文件 本节将介绍 : 如何读取图片文件二进制流并显示在图像控件中 如何将图像控件图像读取到内存流并另外存储 savefiledialog 控件在另存文件中的作用案例学习 : 写二进制文件 图片的存储与复制 (1) 如图 3-10 所示, 从工具箱中拖曳 MainMenu 控件 SaveFileDialog 控件 GroupBox 控件 PictureBox 控件各一个到 Form 窗体上 ;Form 窗体的 text 属性设置为 图片处理器 ;GroupBox 控件的 text 属性设置为 图片显示区 ;PictureBox 控件的 sizemode 属性设置为 zoom MainMenu 控件添加菜单项及子项如表 3-14 所示 图 3-10 图片处理器界面 表 3-14 MainMenu 控件的菜单项及子项设置 菜单项 子项 其他属性 图片 (&P) 打开图片 (&O) 快捷键等其他属性由用户自行设定复制图片 (&C) 同 打开图片 子项 关闭 (&Q) - 同 打开图片 子项

37 130 C# WinForm 实践开发教程 (2) 双击主界面上菜单控件的所有菜单项, 进入.cs 文件编辑状态准备进行开发, 代码如下 : ///====================================== 代码编辑 =========================================== using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form12 : Form public Form12() InitializeComponent(); /******************************************************* ** 方法名 :GetFileBytes ** 输入参数 :Filename: 文件名称 ; ** 输出参数 : 比特流类型 ** 返回值 :byte[] 二进制流 ** 创建人 : 钱哨 ** 创建日期 : ** 描述 : 将读取的文件转化成为二进制流 *******************************************************/ ///<param name="filename"> 打开的图片具体路径及文件名称 </param> ///<returns> 比特流类型 </returns> public byte[] GetFileBytes(string Filename) if (Filename=="") return null; try FileStream filestream=new FileStream(Filename, FileMode.Open, FileAccess.Read); BinaryReader binaryreader=new BinaryReader(fileStream); byte[] filebytes=binaryreader.readbytes((int)filestream.length); binaryreader.close(); filestream.close(); return filebytes;

38 第 3 章文件处理技术 131 catch return null; /******************************************************* ** 方法名 :WriteFileBytes ** 输入参数 :TargetFilename: 目标文件名称 ; ** 输出参数 : 布尔类型 : 是否写成功 ** 返回值 :byte[] 二进制流 ** 创建人 : 钱哨 ** 创建日期 : ** 描述 : 将读取的文件转化成为二进制流 *******************************************************/ ///<param name="targetfilename"> 目标文件 </param> ///<param name="filebytes"> 文件比特流 </param> ///<returns> 布尔类型 : 是否写成功 </returns> public bool WriteFileBytes(string TargetFilename, byte[] filebytes) bool k=true; if (TargetFilename!= "" && filebytes.length!= 0) try FileStream filestream=new FileStream(TargetFilename, FileMode.OpenOrCreate, FileAccess.Write); BinaryWriter binarywriter=new BinaryWriter(fileStream); binarywriter.write(filebytes); binarywriter.flush(); binarywriter.close(); filestream.close(); catch k=false; else k=false; return k;

39 132 C# WinForm 实践开发教程 /// 菜单 : 打开图片 private void toolstripmenuitem3_click(object sender, EventArgs e) try OpenFileDialog openfile=new OpenFileDialog(); openfile.filter="jpg 类型图片 (*.jpg) *.jpg BMP 类型图片 (*.bmp) *.bmp"; if (openfile.showdialog()==dialogresult.ok) byte[] picbinary=getfilebytes(openfile.filename); // 第一步 : 打开图片文件, 获得比特流 MemoryStream mempicstream=new MemoryStream(picbinary); // 第二步 : 将比特流储存在内存工作流中 picturebox1.image=image.fromstream(mempicstream); // 第三步 : 加载内存流到图片控件 mempicstream.dispose(); mempicstream.close(); catch (Exception m) MessageBox.Show(" 读取图片出错, 可能的问题是 :"+Convert.ToString(m), " 错误提示 "); /// 将打开的图片进行复制 private void toolstripmenuitem4_click(object sender, EventArgs e) try if (picturebox1.image==null) MessageBox.Show(" 禁止图片为空时候另存信息 ", " 错误提示 "); else savefiledialog1.filter="jpg 类型图片 (*.jpg) *.jpg"; DialogResult result=savefiledialog1.showdialog(); if (result==dialogresult.ok) MemoryStream ms=new MemoryStream(); Bitmap bm=new Bitmap(pictureBox1.Image); bm.save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

40 第 3 章文件处理技术 133 byte[] bytes=ms.toarray(); WriteFileBytes(saveFileDialog1.FileName, bytes); MessageBox.Show(" 另存图片成功 ", " 提示 "); ms.dispose(); ms.close(); bm.dispose(); catch (Exception m) MessageBox.Show(" 读取图片出错, 可能的问题是 :"+Convert.ToString(m), " 错误提示 "); (3) 调试 运行程序, 得到效果如图 3-11 所示 图 3-11 图片处理器效果图 3.5 读写内存流 了解读写内存流 MemoryStream 的特点 学习如何建立内存流 MemoryStream 了解读写缓存流 BufferedStream 学习如何建立缓存流 BufferedStream

41 134 C# WinForm 实践开发教程 3.2 节介绍了文件流类 FileStream, 本节将继续介绍其他流 什么是流? 在.NET 程序中, 涉及的输入和输出都是通过流来实现的 流是串行化设备的抽象表示, 以读 / 写字节的方式从存储器读 / 写数据 存储器是存储媒介, 磁盘或内存都是存储器 正如除磁盘外还存在着多种存储器, 除文件流之外也存在多种流, 例如网络流 内存流 缓存流等 Stream 类及其派生类组成流的家族, 如图 3-12 所示 Stream 类 抽象类 MemoryStream BufferedStream 图 3-12 流家族类关系图 所有流的类都是从 Stream 类派生出来的 Stream 类是所有流的抽象基类, 所以它不能被实例 化为对象, 只能通过变量引用派生类的对象 Stream 变量所引用对象具有以下一种或多种功能 : 读 : 通过 Read() 或 ReadByte() 方法实现读数据 ; 写 : 通过 Write() 或 WriteByte() 方法实现写数据 ; 定位 : 通过 Position 属性和 Seek() 方法实现定位 注意 派生的流对象只能支持这些功能中的一部分, 例 NetworkStream 不支持定位 可以利用从 Stream 派生出来的对象的 CanRead CanWrite 和 CanSeek 属性判断流对象支持哪些操作 另外, 对于 MemoryStream 类, 有两点需要说明 对内存而不是对磁盘进行数据读写 减少了对临时缓冲区和文件的需要 而对于 BufferedStream 类, 有四点需要说明 : 对缓冲区进行数据读写 允许操作系统创建自己的缓冲区 输入 / 输出效率高且速度更快 在网络通讯的时候经常会使用到 读写内存流 MemoryStream 类 MemoryStream 类创建这样的流 : 该流以内存而不是磁盘或网络连接作为支持存储区 MemoryStream 类封装以无符号字节数组形式存储的数据, 该数组在创建 MemoryStream 对象时被初始化, 或者该数组可创建为空数组 可在内存中直接访问这些封装的数据 内存流可降低应用程序中对临时缓冲区和临时文件的需要 FileStream 对象与 MemoryStream 对象有很大区别, 主要体现在以下方面 : (1)FileStream 对象的数据来自文件, 而 MemoryStream 对象的数据来自内存缓冲区 ; 这两个类都继承自 Stream 类

42 第 3 章文件处理技术 135 (2)MemoryStream 的数据来自内存中的一块连续区域, 这块区域称为 缓冲区 (Buffer) 可以把缓冲区看成一个数组, 每个数组元素可以存放一个字节的数据 (3) 在创建 MemoryStream 对象时, 可以指定缓冲区的大小, 并且可以在需要的时候更改 MemoryStream 类的构造函数有 7 种, 我们这里重点介绍 3 种, 如表 3-15 所示 表 3-15 MemoryStream 类的常用构造函数 名称 MemoryStream () MemoryStream (byte[]) MemoryStream (byte[], Boolean) 说明 使用初始化为零的可扩展容量初始化 MemoryStream 类的新实例 基于指定的字节数组初始化 MemoryStream 类的无法调整大小的新实例 使用按指定要求设置的 CanWrite 属性, 基于指定的字节数组初始化 MemoryStream 类的无法调整大小的新实例 内存流对象还有一些重要的属性 其中 Length 属性代表了内存流对象存放的数据的真实长度, 而 Capacity 属性则代表了分配给内存流的内存空间大小 可以使用字节数组创建一个固定大小的 MemoryStream 小实验 1 MemoryStream mem=new MemoryStream(buffer); // 这时, 无法再设置 Capacity 属性的大小 小实验 2 MemoryStream mem=new MemoryStream(buffer, false); // 这时,CanWrite 属性就被设置为 false 这样, 在内存流对象被实例化时, 一些属性就被影响了 MemoryStream 类案例学习 案例学习 :MemoryStream 类的实际操作通过本案例, 读者将掌握如何通过使用内存流的属性 方法来获取内存流的占用空间信息及改变内存流空间大小 (1) 如图 3-13 所示, 从工具箱中拖曳五个 Label 控件和一个 Button 控件到 Form 窗体上 图 3-13 MemoryStream 类案例界面

43 136 C# WinForm 实践开发教程 (2) 双击所有 Button 控件, 进入.cs 文件编辑状态准备进行开发, 代码如下 : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form14 : Form public Form14() InitializeComponent(); // 建立字节数组 byte[] buffer=new byte[600]; /// 获取测试性数据 private void GetTestData() for (int i=0; i<600; i++) buffer[i]=(byte)(i % 256); //byte 类型的数最大不能超过 255, 用 256 取模实现 ///button1 按钮的鼠标单击 Click 事件 private void button1_click(object sender, EventArgs e) // 创建测试数据 GetTestData(); // 创建内存流对象, 初始分配 50 字节的缓冲区 MemoryStream mem=new MemoryStream(50); // 向内存流中写入字节数组的所有数据 mem.write(buffer,0,buffer.getlength(0)); // 使用从缓冲区读取的数据将字节块写入当前流 // 参数 : //1.buffer 从中写入数据的缓冲区 //2.offset buffer 中的字节偏移量, 从此处开始写入

44 第 3 章文件处理技术 137 //3.count 最多写入的字节数 //GetLength(0) 为 GetLength 的一个示例, 它返回 Array 的第一维中的元素个数 label1.text=" 写入数据后的内存流长度是 :"+mem.length.tostring(); label2.text=" 分配给内存流的缓冲区大小 :"+mem.capacity.tostring(); mem.setlength(500); label3.text=" 调用 SetLength 方法后的内存流的长度 :"+mem.length.tostring(); mem.capacity=620;// 注意 : 此值不能小于 Length 属性 label4.text=" 调用 Capacity 方法后缓冲区的大小 :"+mem.capacity.tostring(); // 将读写指针移到距流开头 10 个字节的位置 mem.seek(45, SeekOrigin.Begin); label5.text=" 内存中的信息是 :"+mem.readbyte().tostring(); 调试 运行程序, 得到效果如图 3-14 所示 图 3-14 MemoryStream 类案例运行效果图 读写缓存流 BufferedStream 类 BufferedStream 类用于为另一流上的读写操作添加一个缓冲区 缓冲区是内存中的字节块, 用于缓存数据, 从而减少对操作系统的调用次数 因此, 缓冲区可提高读取和写入性能 使用缓冲区可进行读取或写入, 但不能同时进行这两种操作 BufferedStream 的 Read 和 Write 方法自动维护缓冲区的读写过程 BufferedStream 可写在某些类型的流周围 它提供从基础数据源或储存库读取字节以及将字节写入基础数据源或储存库的实现 使用 BinaryReader 和 BinaryWriter 读取和写入其他数据类型 BufferedStream 用于在不需要缓冲区时防止缓冲区降低输入和输出速度 如果读取和写入的数据大小始终大于内部缓冲区, 那么 BufferedStream 甚至可能无法分配内部缓冲区 BufferedStream 也在共享缓冲区中缓冲读取和写入 ( 假设用户几乎始终执行一系列读取或写入操作, 而很少在读取和写入之间切换 ) BufferedStream 类的构造函数有两种, 如表 3-16 所示

45 138 C# WinForm 实践开发教程 表 3-16 BufferedStream 类的常用构造函数 名称 BufferedStream (Stream) BufferedStream (Stream, Int32) 说明 使用默认的缓冲区大小 (4096 字节 ) 初始化 BufferedStream 类的新实例 使用指定的缓冲区大小初始化 BufferedStream 类的新实例 案例学习 : 通过缓冲区交换数据本案例将介绍如何通过使用缓存流来读写文件 (1) 如图 3-15 所示, 从工具箱中拖曳一个 GroupBox 控件,text 属性设置为 打开文件 ; 拖曳两个 Label 控件到 GroupBox 上,text 属性分别设置为 请选择源文件名 : 请填写备份文件名 : ; 拖曳两个 TextBox 控件到 GroupBox 上, 其中第一个 TextBox 控件的 Enabled 属性为 false; 拖曳两个 Button 控件到 GroupBox 上,text 属性分别设置为 打开文件 备份文件 图 3-15 通过缓冲区交换数据界面 (2) 双击所有 Button 控件, 进入.cs 文件编辑状态准备进行开发, 代码如下 : using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace FileOptionApplication public partial class Form16 : Form public Form16() InitializeComponent(); /// 打开原始文件 private void button1_click(object sender, EventArgs e) OpenFileDialog openfile=new OpenFileDialog(); openfile.filter=" 文本文件 (*.txt) *.txt";

46 第 3 章文件处理技术 139 if (openfile.showdialog()==dialogresult.ok) textbox1.text=openfile.filename.tostring(); /// 备份目标文件 ;Stream 和 BufferedStream 的实例 private void button2_click(object sender, EventArgs e) string targetpath=@"c:\"+textbox2.text+".txt"; FileStream fs =File.Create(targetpath); fs.dispose(); fs.close(); string sourcepath=textbox1.text; Stream outputstream= File.OpenWrite(targetpath); Stream inputstream=file.openread(sourcepath); BufferedStream bufferedinput=new BufferedStream(inputStream); BufferedStream bufferedoutput=new BufferedStream(outputStream); byte[] buffer=new Byte[4096]; int bytesread; while ((bytesread =bufferedinput.read(buffer, 0,4096)) > 0) bufferedoutput.write(buffer, 0, bytesread); // 通过缓冲区进行读写 MessageBox.Show(" 给定备份的文件已创建 ", " 提示 "); bufferedoutput.flush(); bufferedinput.close(); bufferedoutput.close(); // 刷新并关闭 BufferStream File 是静态对象, 提供对文件的创建 复制 移动和删除等一系列操作 File.Create( 文件名 ) 可以创建新的文件, 并结合 FileStream 对象来进行读写操作 FileStream 和 BinaryReader BinaryWriter 对象结合起来可对二进制数据进行操作 在 C# 中指明文件名的时候, 要使用转义字符 \\ 内存流提供无法调整大小的数据流视图, 而且只能向其写入 BufferedStream 对象对缓冲区进行读写

47 140 C# WinForm 实践开发教程 1.FileInfo 类和 File 类的设计差别是什么? 2. 文本文件的操作和图像文件的操作在本质上有何差异? 3. 编写代码, 在一个 WinForm 窗体中建立一个菜单, 命名为 文件夹, 其子菜单包括 创建文件夹 删除文件夹 和 移动文件夹, 通过单击这 3 个文件夹分别实现在 C:\ 下面相应的功能 4. 在本章课后练习 3 的基础上再创建一个菜单, 命名为 文件, 其子菜单包括 创建文本文件 和 删除文本文件, 分别用于创建和删除练习 3 文件夹中的相关文本文件 5. 模拟 Windows 操作系统, 完整开发一个文本文件编辑器软件

目录 1 文件操作之一 版权声明 内容详情 追加文件 拷贝文件 删除文件 移动文件 创建目录 文件夹内容拷贝 文件夹内容删除..

目录 1 文件操作之一 版权声明 内容详情 追加文件 拷贝文件 删除文件 移动文件 创建目录 文件夹内容拷贝 文件夹内容删除.. 细细品味 C# 文件操作 精华集锦 csaxp 虾皮工作室 http://www.cnblogs.com/xia520pi/ 2011 年 10 月 4 日 目录 1 文件操作之一...2 1.1 版权声明...2 1.2 内容详情...2 1.2.1 追加文件...2 1.2.2 拷贝文件...2 1.2.3 删除文件...2 1.2.4 移动文件...3 1.2.5 创建目录...3 1.2.6

More information

<4D F736F F D E466F726DB3CCD0F2C9E8BCC6D3EBCAB5BCF920B5DA35D5C22E646F63>

<4D F736F F D E466F726DB3CCD0F2C9E8BCC6D3EBCAB5BCF920B5DA35D5C22E646F63> 第 5 章 输入与输出 学习目标 : 理解文件与流的基本概念 ; 了解文件与目录的基本知识及其常用的类 ; 掌握文件流读写方法 5.1 概述 文件是计算机管理数据的基本单位, 同时也是应用程序保存和读取数据的一个重要场所 C# 中文件处理技术称为 I/O 技术, 即输入与输出技术, 或称为流处理技术或文件流处理技术 5.1.1 文件与流 文件和流是既有区别又有联系的两个概念 文件是指在各种存储介质上永久保存数据的有序集合,

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

Microsoft PowerPoint - 06.ppt

Microsoft PowerPoint - 06.ppt 楚广明 C# 简明教程 Email:chu888chu888@Gmail.com Blog:http://www.cnblogs.com/chu888chu888 楚广明 C# 简明教程第 1 页版本 V1.0 1 Module 6: Input/Output 楚广明 C# 简明教程第 2 页版本 V1.0 2 Review 在这一章中, 我们将主要学习如何使用 Microsoft.NET FrameWork

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

第7章 目录和文件操作

第7章  目录和文件操作 第 7 章 目录和文件操作 本章介绍了 C# 中目录和文件的管理操作方法, 主要涉及两组类 : 一组是关于文件整体操作的 I/O 类, 包括 :File FileInfo DriveInfo Directory 和 DirectoryInfo 等, 这些类是密封类 可以创建这些类的新实例, 但它们不能有派生类 ; 另一组是关于从流读取和写入流的类, 包括 StreamReader 和 StreamWriter

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

Microsoft Word - CX1000-HMI_程序开发_PLC通讯 用 VB.Net 开发 CX1000 的 HMI 第二部分和 TwinCAT PLC 通讯 一 TwinCAT 动态库 TwinCAT.Ads.dll The TwinCAT.Ads.dll 是一个.NET 类库, 它提供和 ADS 设备通讯的类 如果 TwinCAT PLC 运行在 IPC 上, 则需要添加的类库是路径 \TwinCAT\ADS Api\.NET\v1.1.4322 下的 TwinCAT.Ads.dll

More information

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63> 基于 WINCE 平台 C# 编程要点之一 本文主要介绍在基于 Windows CE 平台的英创嵌入式主板下进行 C#(Microsoft Visual Stdio.Net 2005) 应用程序开发时会常常用到的一些功能函数以及开发方法, 这些方法适用于英创采用 WinCE 平台的所有型号嵌入式主板, 包括 EM9000 EM9260 EM9160 等 本文要点包括 : 文件的删除和复制 如何获取存取设备的空间大小

More information

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f Web Chapter 22 SharePoint Web Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web 21 22-1 SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f Views.asmx View SharePoint

More information

untitled

untitled 1 MessageBox 類 MessageBox 類 Show Show (,,, ); Show (string, string, MessageBoxButtons, MessageBoxIcon) MessageBox 類 列 數 MessageBoxButtons.OK MessageBoxButtons.OKCancel MessageBoxButtons.AbortRetryIgnore

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

untitled

untitled Inside ASP.NET 2.0- ASP.NET 1.1 2. 理念 讀 了 了 度 讀 了 理 類 來 來說 流 了 來 來 來 來 理 來 不 讀 不 不 力 來參 流 讀 了 異 行 來了 錄 行 不 了 來 了 來 行 論說 了 更 不 例 來了 力 行 樂 不 說 兩 例 利 來 了 來 樂 了 了 令 讀 來 不 不 來 了 不 旅行 令 錄 錄 來 了 例 來 利 來 ManagerProvide

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

C H A P T E R 7 Windows Vista Windows Vista Windows Vista FAT16 FAT32 NTFS NTFS New Technology File System NTFS

C H A P T E R 7 Windows Vista Windows Vista Windows Vista FAT16 FAT32 NTFS NTFS New Technology File System NTFS C H P T E R 7 Windows Vista Windows Vista Windows VistaFT16 FT32NTFS NTFSNew Technology File System NTFS 247 6 7-1 Windows VistaTransactional NTFS TxFTxF Windows Vista MicrosoftTxF CIDatomicity - Consistency

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464>

<C8EBC3C5C6AAA3A8B5DA31D5C2A3A92E696E6464> 第 1 章 进入 Photoshop 的全新世界 本章导读 Photoshop 1 1.1 Photoshop CS6 Photoshop Photoshop 1.1.1 Photoshop POP 1-1 图 1-1 平面广告效果 1.1.2 Photoshop 1-2 Photoshop CS6 Photoshop CS6 Photoshop CS6 Extended 3D 3 Photoshop

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

Linux服务器构建与运维管理

Linux服务器构建与运维管理 1 Linux 服务器构建与运维管理 第 2 章 :Linux 基本命令 阮晓龙 13938213680 / rxl@hactcm.edu.cn http://linux.xg.hactcm.edu.cn http://www.51xueweb.cn 河南中医药大学管理科学与工程学科 2018.3 2 提纲 目录与文件的操作 mkdir touch mv cp rm rmdir file tree

More information

untitled

untitled 1 .NET 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Response 類 Write 料 Redirect URL Response.Write("!! ives!!"); Response.Redirect("WebForm2.aspx"); (1) (2) Web Form

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

Microsoft PowerPoint - string_kruse [兼容模式]

Microsoft PowerPoint - string_kruse [兼容模式] Strings Strings in C not encapsulated Every C-string has type char *. Hence, a C-string references an address in memory, the first of a contiguous set of bytes that store the characters making up the string.

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

ASP.NET实现下拉框二级联动组件

ASP.NET实现下拉框二级联动组件 ASP.NET 实现下拉框二级联动组件 namespace WebApplicationDlh using System.Drawing; using System.Web; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using Db; / / Area 的摘要说明 /

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

第一章 章标题-F2 上空24,下空24

第一章 章标题-F2 上空24,下空24 Web 9 XML.NET Web Web Service Web Service Web Service Web Service Web Service ASP.NET Session Application SOAP Web Service 9.1 Web Web.NET Web Service Web SOAP Simple Object Access Protocol 9.1.1 Web Web

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

ASP.NET 4.0 專題實務 I 17-1 System.IO 命名空間 要使用檔案, 務必在程式上方宣告 System.IO 命名空間 (Namespace) 如果用在 Inline Code( 把程式跟 HTML 寫在同一個.aspx 檔裡面 ), 必須寫成 : Page Langu

ASP.NET 4.0 專題實務 I 17-1 System.IO 命名空間 要使用檔案, 務必在程式上方宣告 System.IO 命名空間 (Namespace) 如果用在 Inline Code( 把程式跟 HTML 寫在同一個.aspx 檔裡面 ), 必須寫成 : Page Langu CHAPTER 17 資料流 I/O 與檔案 檔案的應用, 在程式設計上一直是個重點 雖然有了資料庫幫我們記錄資料, 但有些小資料不需要勞師動眾 也不必存放太久, 如果用一個文字檔來記錄, 反而更簡單 舉例來說, 尚未上線的系統 或是有些功能繁雜的程式要撰寫 我們就可以利用檔案的功能來做記錄 一邊測試一邊記錄這些程式在各階段的運作狀況, 每個階段成功與否都可以直接寫入文字檔裡面, 不需要跟資料庫搶資源

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

Microsoft Word - AccessPortal使用手册v3.1.doc

Microsoft Word - AccessPortal使用手册v3.1.doc HighGuard Access Portal 使用手册 地址 : 上海市张江高科技园区松涛路 563 号海外创新园 B 座 301-302 室 电话 : 021-50806229 传真 : 021-50808180 电子邮件 : marketing@highguard.com.cn 第 1 页共 24 页 目录 1. ACCESSPORTAL 概述...4 1.1. AccessPortal 主页面

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

Microsoft Word - 实验3.doc

Microsoft Word - 实验3.doc 实验 3 C# 和 ASP.NET 4.5 一 实验目的 (1) 了解 C# 语言规范 (2) 掌握 C# 基础语法 流程控制和异常处理等 (3) 掌握创建 C# 类并应用于 ASP.NET 4.5 页面中的方法 (4) 掌握 ASP.NET 4.5 页面的调试方法 二 实验内容及要求 1. 转换输入的成绩到相应的等级要求如下 : (1) 页面浏览效果如图 3-1 所示 (2) 成绩输入使用 TextBox

More information

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y 拼图游戏 任务说明 本实例实现了拼图游戏的开发 运行程序, 单击 开始 按钮将打乱图片的位置, 效果如图 1 所示, 然后通过鼠标单击图片进行移动, 直到将所有图片都移动到正确位置, 游戏过关, 过关后的效果如图 2 所示 图 1 打乱图片位置的效果图 2 图片移动到正确位置的效果 关键技术 本程序主要通过 Swing 与枚举类实现, 程序将一幅完整的图片平均分成 9 部分, 每一部分为一个正方形,

More information

Converting image (bmp/jpg) file into binary format

Converting image (bmp/jpg) file into binary format RAiO Image Tool 操作说明 Version 1.0 July 26, 2016 RAiO Technology Inc. Copyright RAiO Technology Inc. 2013 RAiO TECHNOLOGY INC. www.raio.com.tw Revise History Version Date Description 0.1 September 01, 2014

More information

Microsoft PowerPoint - CPP-Ch Print.ppt [兼容模式]

Microsoft PowerPoint - CPP-Ch Print.ppt [兼容模式] Chapter 17 File Processing http://jssec.seu.edu.cn 杨明 yangming2002@seu.edu.cn OBJECTIVES To create, read, write and update files. Sequential file processing. Random-access file processing. To use high-performance

More information

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1

Photoshop CS6 艺术设计案例教程 ( 第二版 ) 1.1 Photoshop 的应用领域 Photoshop,,, Photoshop Photoshop 的用途 Photoshop CIS ( ) ( ) 案例展现 ~ 1 Chapter 01 Photoshop CS6 的基本操作 本章内容 1.1 Photoshop 的应用领域 1.6 控制面板的显示与隐藏 1.2 位图和矢量图的特性 1.7 新建 打开与保存文件 1.3 像素和分辨率的关系 1.8 图像的缩放 1.4 色彩模式 1.9 屏幕显示模式 1.5 Photoshop CS6 界面 1.10 计算机图形图像常用的色彩模式 Photoshop CS6 艺术设计案例教程

More information

untitled

untitled 1 .NET sln csproj dll cs aspx 說 料 料 利 來 料 ( 來 ) 利 [] [] 來 說 切 切 理 [] [ ] 來 說 拉 類 類 [] [ ] 列 連 Web 行流 來 了 不 不 不 流 立 行 Page 類 Load 理 Click 滑 料 Response 列 料 Response HttpResponse 類 Write 料 Redirect URL Response.Write("!!

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

Spark读取Hbase中的数据

Spark读取Hbase中的数据 Spark 读取 Hbase 中的数据 Spark 和 Flume-ng 整合, 可以参见本博客 : Spark 和 Flume-ng 整合 使用 Spark 读取 HBase 中的数据 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 大家可能都知道很熟悉 Spark 的两种常见的数据读取方式 ( 存放到 RDD 中 ):(1)

More information

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v

while ((ch = fr.read())!= -1) { System.out.print((char) ch); fr.close(); 例 3: 用 BufferedReader 读 TXT 文件 public class FileReaderDemo3 { public static v 第九章 Java I/O 流操作 实验目的 (1) 掌握文本文件的读写方法 (2) 掌握 InputStream OutputStream 的使用方法 (3) 熟悉 FileReader,BufferedReader,InputStreamReader 和 FileWriter, BufferedWriter, PrintWriter 的使用方法 ; 理解使用过滤流实现数据项的读写 :DataOutputStream,

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

1 1 大概思路 Nginx 集群之 WCF 大文件上传及下载 BasicHttpBinding 相关配置解析 transfermode messageencoding maxreceivedmessagesize receivetimeout sendtimeout 编写 WCF 服务 客户端程序

1 1 大概思路 Nginx 集群之 WCF 大文件上传及下载 BasicHttpBinding 相关配置解析 transfermode messageencoding maxreceivedmessagesize receivetimeout sendtimeout 编写 WCF 服务 客户端程序 目录 1 大概思路... 1 2 Nginx 集群之 WCF 大文件上传及下载... 1 3 BasicHttpBinding 相关配置解析... 2 4 编写 WCF 服务 客户端程序... 3 5 URL 保留项... 8 6 部署 WCF 服务程序到局域网内 1 台 PC 机... 8 7 Nginx 集群配置搭建... 9 8 WCF 客户端程序的运行结果... 11 9 总结... 13

More information

C#程序设计实验

C#程序设计实验 程序设计基础 实验指导 / 实验一 : 认识 C# 1 程序设计基础 实验指导 实验一 : 认识 C# 一 实验目的 1 掌握 Visual Studio 的基本操作方法, 学会使用该编译工具 2 掌握编辑 编译 运行控制台应用程序的基本过程 3 掌握建立 Windows 窗体应用程序的基本过程 4 通过运行 C# 程序, 初步了解 C# 程序的特点 二 实验学时 2 学时 三 实验类型 验证性实验

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 按钮对象 (button) 当 JavaScript 读到 标记中的 type 属性值为 button 时, 自动建立一个按钮对象, 并将该对象放到表单对象的 elements 数组当中 按钮对象包括 : 普通按钮 (button) 提交按钮 (submit) 重置按钮 (reset) 1. 使用按钮对象的格式 document.forms[ 索引值 ].elements[ 索引值

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

untitled

untitled 1 Outline ArrayList 類 列類 串類 類 類 例 理 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object

More information

第十一章 文件和数据的导入与导出

第十一章  文件和数据的导入与导出 第十一章 文件和数据的导入与导出 本机数据文件存储与打开 数据导入与导出 低级 IO 文件 1 save 和 load 命令 save 保存工作区间的变量 ; load 调用外部变量和数据 >>a=1;b=2;c=3;d=[1,2;3,4]; >>save file1 a b c d % 将变量 a,b,c,d 保存在 file1.mat 文件中. >>save file2 a b % 将变量 a,b

More information

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj Message Transition 5-1 5-2 DataInputStream Class 5-3 DataOutputStream Class 5-4 PrintStream Class 5-5 (Message Transition) (Exercises) Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream

More information

通过Hive将数据写入到ElasticSearch

通过Hive将数据写入到ElasticSearch 我在 使用 Hive 读取 ElasticSearch 中的数据 文章中介绍了如何使用 Hive 读取 ElasticSearch 中的数据, 本文将接着上文继续介绍如何使用 Hive 将数据写入到 ElasticSearch 中 在使用前同样需要加入 elasticsearch-hadoop-2.3.4.jar 依赖, 具体请参见前文介绍 我们先在 Hive 里面建个名为 iteblog 的表,

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式] Arrays and Strings 存储同类型的多个元素 Store multi elements of the same type 数组 (array) 存储固定数目的同类型元素 如整型数组存储的是一组整数, 字符数组存储的是一组字符 数组的大小称为数组的尺度 (dimension). 定义格式 : type arrayname[dimension]; 如声明 4 个元素的整型数组 :intarr[4];

More information

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0 SDChain-Matrix 节点搭建指南 目录 1 环境要求... 3 2 软件下载... 4 3 安装部署... 4 3.1 部署可执行程序目录... 4 3.2 部署配置文件目录... 4 3.3 部署数据库文件目录... 4 3.4 部署日志文件目录... 4 3.5 部署依赖库文件目录... 4 4 配置参数... 5 5 启动运行... 7 5.1 普通模式启动... 7 5.2 加载启动模式...

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

文件

文件 CH10 文件 1 文件的概念 一 文件分类 二 文件的组织结构 : ASCII 码文件 ( 文本文件 ) 二进制文件 文件是二进制代码的, 则文件就是字节流 文件是 ASCII 码的, 则文件就是字符流, 也是字节流 1 如 : 对于整型变量 x, 其值为 32767 若以文本方式存放, 则共有 5 个字符, 内容为 : 00110011 00110010 00110111 00110110 00110111

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

Microsoft Word - CPFinal2010Spring

Microsoft Word - CPFinal2010Spring 通識計算機程式設計期末考試題, 6/25/2010 共 12 頁, 滿分 100 分外加最多 4 分 1. 撰寫 C# 敘述達成下列要求 : ( 假設 using System; 敘述已經包含於程式中 ) (a) 撰寫類別程式 Rhombus 代表菱形, 其中宣告私有 double 變數 d1 d2, 分別代表兩互相垂直的對角線長, 另有建構式設定 d1 d2 之值, 屬性 D1 D2 分別傳回與設定

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

VB程序设计教程

VB程序设计教程 高 等 学 校 教 材 Visual Basic 程 序 设 计 教 程 魏 东 平 郑 立 垠 梁 玉 环 石 油 大 学 出 版 社 内 容 提 要 本 书 是 按 高 等 学 校 计 算 机 程 序 设 计 课 程 教 学 大 纲 编 写 的 大 学 教 材, 主 要 包 括 VB 基 础 知 识 常 用 程 序 结 构 和 算 法 Windows 用 户 界 面 设 计 基 础 文 件 处

More information

Visual Basic D 3D

Visual Basic D 3D Visual Basic 2008 2D 3D 6-1 6-1 - 6-2 - 06 6-2 STEP 1 5-2 (1) STEP 2 5-3 (2) - 6-3 - Visual Basic 2008 2D 3D STEP 3 User1 6-4 (3) STEP 4 User1 6-5 (4) - 6-4 - 06 STEP 5 6-6 (5) 6-3 6-3-1 (LoginForm) PictureBox1

More information

Object-Oriented Programming, Mid-term Test, 11/21/2000

Object-Oriented Programming, Mid-term Test, 11/21/2000 通識計算機程式設計期末考試題參考解答, 6/25/2010 1. 撰寫 C# 敘述達成下列要求 : ( 假設 using System; 敘述已經包含於程式中 ) (a) 撰寫類別程式 Rhombus 代表菱形, 其中宣告私有 double 變數 d1 d2, 分別代表兩互相垂直的對角線長, 另有建構式設定 d1 d2 之值, 屬性 D1 D2 分別傳回與設定 d1 d2 之值, 此處可先不處理例外情況

More information

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

}; P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ,   string imagedata; if(0!= read_image(a.jpg,imagedata)) { return -1; } string rsp; ytopen_sdk m_sd tencentyun-youtu c++ sdk for 腾讯云智能优图服务 & 腾讯优图开放平台 安装 运行环境 Linux 依赖项 - curl-7.40.0, 获取更新版本 https://github.com/bagder/curl - openssl-1.0.1k, 获取更新版本 https://github.com/openssl/openssl 构建工程 工程采用 CMake 构建 1.

More information

untitled

untitled 1 .NET 料.NET 料 料來 類.NET Data Provider SQL.NET Data Provider System.Data.SqlClient 料 MS-SQL OLE DB.NET Data Provider System.Data.OleDb 料 Dbase FoxPro Excel Access Oracle Access ODBC.NET Data Provider 料

More information

untitled

untitled 12-1 -2 VC# Web Blog 12-1 -1-1 12-1.1-1 C:\ ChartModuleSample_CSharp\Application\2001\ Files\ 4096 KB 120 Web.Config httpruntime maxrequestlength executiontimeout 12-2

More information

untitled

untitled 1 MSDN Library MSDN Library 量 例 參 列 [ 說 ] [] [ 索 ] [] 來 MSDN Library 了 類 類 利 F1 http://msdn.microsoft.com/library/ http://msdn.microsoft.com/library/cht/ Object object 參 類 都 object 參 object Boxing 參 boxing

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

云数据库 RDS SDK

云数据库 RDS SDK 云数据库 RDS SDK SDK SDK 下载 SDK 下载 最新版本 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip 历史版本 2015-11-3 java_sdk.zip python_sdk.zip php_sdk.zip c#_sdk.zip JAVA 教程 JAVA 创建 Access Key 登陆阿里云账号 打开 我的 Access

More information

Ch7_小組研討問題

Ch7_小組研討問題 105A 資管一程式設計實驗 08 陣列與向量謝明哲老師 hmz@nttu.edu.tw 1 程式設計實驗 08 陣列與向量 研討問題 05 5.1 使用 call by value 和 call by reference 進行函式呼叫有何差異? 請舉例說明, 為何 swap() 函式必須使用 call by reference 可以有效地將傳入參數的內容互換 ; 而 call by value 則無法達成

More information

untitled

untitled 1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 13 章外存中数据的组织 文件 本章的基本内容是 : 概述 文件的打开与关闭 文件的读写操作 任务 13.1 统计入学成绩 ( 文件版 ) 问题 某大学的博士入学考试科目为外语和两门专业课, 对于每个考生, 输入各科考试成绩并计算总分 要求用文件实现 想法 已经录入的成绩信息应该用文件保存下来, 已经计算的总分也应该保存到文件中, 并已追加方式继续录入 算法 文件 student.txt 存放学生的成绩信息,

More information

技 术 文 件

技  术  文  件 技术文件 技术文件名称 :IAlert 接口使用说明 技术文件编号 : 版 本 :V1.0 共页 ( 包括封面 ) 拟制 审核 会签 标准化 批准 中兴通讯股份有限公司 XX 软件模块详细设计说明 版本号 修改记录 文件编号 版本号 拟制人 / 修改人 拟制 / 修改日期 1 V1.0 胡曦 2005-08-12 新建 更改理由 主要更改内容 ( 写要点即可 ) 注 1: 每次更改归档文件 ( 指归档到事业部或公司档案室的文件

More information

untitled

untitled 1 LinkButton LinkButton 連 Button Text Visible Click HyperLink HyperLink 來 立 連 Text ImageUrl ( ) NavigateUrl 連 Target 連 _blank _parent frameset _search _self 連 _top 例 sample2-a1 易 連 private void Page_Load(object

More information

MVB-1001.DOC

MVB-1001.DOC 20 1.5 10 15 20 25 80 100 CSF 1. 2. 0105 3. 4. 5. 30% 1.5 0.75 1. Visual Basic Visual Basic (A) Visual Basic Enterprise Edition (B) Visual Basic Script Edition (C) Visual Basic Learning Edition (D) Visual

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FC8FD5F2E646F63>

<4D F736F F D E67696E652B ECFE0B9D8C8FDCEACB9A6C4DCC4A3BFE9BDE9C9DC5FC8FD5F2E646F63> ArcEngine+C# TIN 相关三维功能模块介绍 ( 三 ) TreeView 控件控制 TIN 颜色 作者 : 刘志远 Email:592418843@qq.com 1. 简介 本篇介绍如何写一个带复选框及颜色指示图标的 TreeView 控件, 该控件与 TIN 模型分级设色方案中的各级颜色相关联 通过该 TreeView 控件复选框的勾选状态决定 TIN 模型对应颜色层的显示与隐藏, 再结合颜色选择下拉框控件,

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF Chapter 2 WF 2.1 WF 2.2 2. XAML 2. 2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF WF WF WF WF EDI API WF Visual Studio Designer 1 2.1 WF Windows Workflow Foundation 2 WF 1 WF Domain-Specific

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

第四章 102 图 4唱16 基于图像渲染的理论基础 三张拍摄图像以及它们投影到球面上生成的球面图像 拼图的圆心是相同的 而拼图是由球面图像上的弧线图像组成的 因此我 们称之为同心球拼图 如图 4唱18 所示 这些拼图中半径最大的是圆 Ck 最小的是圆 C0 设圆 Ck 的半径为 r 虚拟相机水平视域为 θ 有 r R sin θ 2 4畅11 由此可见 构造同心球拼图的过程实际上就是对投影图像中的弧线图像

More information

Microsoft Word - Broker.doc

Microsoft Word - Broker.doc Broker 模式 采用 broker 模式对分布式计算进行简单模拟 系统在一个进程内模拟分布式环境, 因此不涉及网络编程和进程间通信,Broker 通过本地函数调用的方式实现 request 和 response 的转发 采用 broker 模式对分布式计算进行简单的模拟, 要求如下 : 设计四个 server, 一个 server 接收两个整数, 求和并返回结果, 一个 server 接收两个整数,

More information

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10

1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 Java V1.0.1 2007 4 10 1 4 1.1 4 1.2..4 2..4 2.1..4 3.4 3.1 Java.5 3.1.1..5 3.1.2 5 3.1.3 6 4.6 4.1 6 4.2.6 5 7 5.1..8 5.1.1 8 5.1.2..8 5.1.3..8 5.1.4..9 5.2..9 6.10 6.1.10 6.2.10 6.3..10 6.4 11 7.12 7.1

More information

KV-cache 1 KV-cache Fig.1 WorkflowofKV-cache 2.2 Key-value Key ; Key Mem-cache (FIFO) Value Value Key Mem-cache ( Value 256B 100 MB 20%

KV-cache 1 KV-cache Fig.1 WorkflowofKV-cache 2.2 Key-value Key ; Key Mem-cache (FIFO) Value Value Key Mem-cache ( Value 256B 100 MB 20% 38 11 2013 11 GeomaticsandInformationScienceofWuhanUniversity Vol.38No.11 Nov.2013 :1671-8860(2013)11-1339-05 :A GIS Key-value 1 1 1 1 (1 129 430079) : 设计了一种基于 Key-value 结构的缓存 KV-cache 旨在简化数据结构 高效管理缓存数据

More information

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc

Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc 在 VMWare-5.5+RedHat-9 下建立 本机 QTopia-2.1.1 虚拟平台 张大海 2008-5-9 一 资源下载 1. 需要以下安装包 : tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作

论文,,, ( &, ), 1 ( -, : - ), ; (, ), ; ;, ( &, ),,,,,, (, ),,,, (, ) (, ),,, :. : ( ), ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ( ),,,, 1 原译作 修补者, 但在英译版本中, 被译作 * 夏传玲 : 本文简要回顾了国内外定性研究在最近 多年的发展概况, 总结 了定性研究的六个发展趋势和分析策略上的三种流派 在上述两种背景下, 本文探讨了计算机辅助的定性分析给定性研究带来的机遇和挑战, 特别是它和手工操作对比时的优势和劣势, 以及应用这种定性分析技术所可能面临的困难 : 定性研究定性分析 文化差异,, (, ),,,, ( - ) ( - ) ( - ) ( - ) ( - ) (

More information

工程合同管理 一 民事法律关系概述 1-1 主体 拥有权利承担义务的当事人 法律关系三要素 客体 当事人权利义务所指的对象 内容 具体的权利和义务的内容 图 1-1 法律关系的构成要素

工程合同管理 一 民事法律关系概述 1-1 主体 拥有权利承担义务的当事人 法律关系三要素 客体 当事人权利义务所指的对象 内容 具体的权利和义务的内容 图 1-1 法律关系的构成要素 学习目标 1. 2. 3. 4. 5. 导言 第一节民事法律关系 工程合同管理 一 民事法律关系概述 1-1 主体 拥有权利承担义务的当事人 法律关系三要素 客体 当事人权利义务所指的对象 内容 具体的权利和义务的内容 图 1-1 法律关系的构成要素 1. 2. 2 3. 1 2 3 4 3 工程合同管理 1-1 A. B. C. D. C C C A B D 二 民事法律行为的构成要件 1. 1-1

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

ChinaBI企业会员服务- BI企业

ChinaBI企业会员服务- BI企业 商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:du.haoquan@bizintelsolutions.com 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户

More information

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30

0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30 0 配置 Host MIB 设备 V 1.1.2 ( 简体版 ) 0 Update: 2016/1/30 前言 N-Reporter 支持 Host Resource MIB 监控主机 (Host) 状态, 本文件描述 N-Reporter 用户如何配置 Host MIB 设备 文件章节如下 : 1. 配置 Windows Server 2003... 2 1-1.Windows Server 2003

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information