《C#.net程序设计课件》课件-第八章 流、文件、XML和配置文件_第1页
《C#.net程序设计课件》课件-第八章 流、文件、XML和配置文件_第2页
《C#.net程序设计课件》课件-第八章 流、文件、XML和配置文件_第3页
《C#.net程序设计课件》课件-第八章 流、文件、XML和配置文件_第4页
《C#.net程序设计课件》课件-第八章 流、文件、XML和配置文件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章

流、文件、XML和配置文件C#.net程序设计1本章主要内容流Stream,FileStream、BinaryReader与TextReade等类File类、FileInfo、Directory和DirectoryInfo等类XmlReader、XmlWriter和XmlDocument类处理XML数据使用和管理应用程序配置文件信息流Stream类Stream流是所有流的抽象基类。流是字节序列的抽象概念,流提供向后备存储包括文件、输入/输出设备、内部进程通信管道或者TCP/IP套接字等写入和读取字节,而不必了解操作系统和基础设备的具体细节。流的Read

和Write

方法分别是从当前流读和写字节序列,ReadByte和WriteByte分别是从当前流读和写一个字节。使用Seek

和SetLength

方法修改流的当前位置和长度,使用Position

和Length

属性可查询和修改流的当前位置和长度。stream类支持BeginRead、BeginWrite、EndRead

和EndWrite异步方法读写数据。通过使用CanRead、CanWrite

和CanSeek

属性,应用程序可以查询流的是否具有读,写,和查找功能。Flush

方法可用于清除所有内部缓冲区并确保将所有数据写入基础数据源或储存库。调用流的Close方法将调用Flush,释放操作系统资源,如文件句柄、网络连接或用于任何内部缓冲的内存。流和文件FileStream类

FileStream类是以文件为主的Stream派生类,用于对文件进行读写操作。FileStream类就是根据文件的操作特点对Stream类的实现,它的方法和Stream类基本相同。FileStream构造函数(String,FileMode,FileAccess,FileShare,Int32,Boolean)使用指定的路径、创建模式、读/写方式、共享权限、缓冲区大小和同步或异步状态来初始化FileStream类的新实例,后四个参数是可选的,参数创建模式FileMode和读写方式FileAccess说明如下:流和文件Append打开现有文件并查找到文件尾,或创建新文件。FileMode.Append只能同FileAccess.Write一起使用。任何读尝试都将失败并引发ArgumentException。

Create指定操作系统创建新文件。如果文件已存在,它将被改写。如果文件不存在,则使用CreateNew;否则使用Truncate。

CreateNew指定操作系统应创建新文件。如果文件已存在,则将引发IOException。

Open指定操作系统应打开现有文件。如果该文件不存在,则引发System.IO.FileNotFoundException。

OpenOrCreate指定操作系统应打开文件(如果文件存在);否则,应创建新文件。Truncate指定操作系统应打开现有文件。文件一旦打开,就将被截断为零字节大小。此操作需要FileIOPermissionAccess.Write。试图从使用Truncate打开的文件中进行读取将导致异常。

参数创建模式FileMode读写方式FileAccess枚举型列表Read对文件读访问。可从文件中读取数据。同Write组合即构成读写访问权。

ReadWrite对文件的读访问和写访问。可从文件读取数据和将数据写入文件。(默认)Write文件的写访问。可将数据写入文件。同Read组合即构成读/写访问权。

创建FileStream对象时,如果不指定可选参数,文件将以读写访问(FileAccessReadWrite)的方式打开,并且允许读共享,同时缓冲区的大小被设置为8192字节(8KB),采用同步方式操作。类似FileStream对象,System.IO命名空间中包含一个MemoryStream类,它以内存作为后端存储。另外,System.IO命名空间中还包含一个BufferedStream类,它用来缓冲数据,以减少对操作系统的调用。这个类通常与其他需要缓冲区的流类一起使用,为它们缓冲数据。例:从文件读数据然后将数据写到另一个文件,FileStream项目的代码如下:usingSystem;usingSystem.IO;classFSRead{publicstaticvoidMain(){stringinPath=@"..\..\Program.cs";//输入文件名

FileStreaminfs=newFileStream(inPath,FileMode.Open);//创建已存在文件流

stringoutPath=@"output.txt";//输出文件名

FileStreamoutfs=newFileStream(outPath,FileMode.Create);//创建新文件流

longnBytes=infs.Length;//输入文件流长度//每次读字节长度取读文件字节数最大值(整型最大值)与文件流长度的较小值, intreadLen=(int)Math.Min(int.MaxValue,nBytes); byte[]ByteArray=newbyte[readLen]; intnBytesRead; do{//当输入文件流长度大于整型最大值时,一次无法读完

nBytesRead=infs.Read(ByteArray,0,readLen);//读文件数据

if(nBytesRead==0)break;//没有数据读入,退出循环

outfs.Write(ByteArray,0,nBytesRead);//写数据到文件output.txt }while(nBytesRead>0);infs.Close();outfs.Close();}}BinaryReader与BinaryWriter类

BinaryReader与BinaryWriter类是用于读写基本数据类型数据的流类,在创建实例时需要指定关联的流对象。默认用UTF-8编码初始化。下例使用FileStream作为构造函数的参数创建BinaryReader实例: BinaryReaderbr=newBinaryReader(new FileStream(fileName,FileMode.Open));BinaryWriter是用于写基本数据类型数据的流类,重载方法Write()写各种基本数据类型数据:如Write(Boolean),Write(Int32),Write(String)等。BinaryReader实现以下FileStream所没有的读基本数据类型数据的方法:

流和文件ReadBoolean

从当前流中读取Boolean值,并使该流的当前位置提升1个字节。ReadChar

从当前流中读取下一个字符,并根据所使用的Encoding和从流中读取的特定字符,提升流的当前位置。ReadChars从当前流中读取count个字符,以字符数组的形式返回数据,并根据所使用的编码和从流中读取的特定字符,提升当前位置。ReadDecimal

从当前流中读取十进制数值,并将该流的当前位置提升十六个字节。ReadDouble

从当前流中读取8字节浮点值,并使流的当前位置提升8个字节。ReadInt16

从当前流中读取2字节有符号整数,并使流的当前位置提升2个字节。ReadInt32

从当前流中读取4字节有符号整数,并使流的当前位置提升4个字节。ReadString

从当前流中读取一个字符串。字符串有长度前缀,一次7位被编码为整数。BinaryReader读基本数据类型数据的主要方法例:使用BinaryReader,FileStream读写基本数据类型数据到文件,项目BinaryReadWrite代码如下:classMyStream{ privateconststringFILE_NAME="Test.data";//文件名

publicstaticvoidMain(String[]args){//新建空文件用于写入数据. FileStreamfs=newFileStream(FILE_NAME,FileMode.Create); BinaryWriterw=newBinaryWriter(fs);//指定关联的FileStream流对象fs for(inti=0;i<11;i++){//写入数据到Test.data文件

w.Write(i);//写入整数

w.Write(i.ToString());//写入字符串

} w.Close(); fs.Close(); fs=newFileStream(FILE_NAME,FileMode.Open,FileAccess.Read); BinaryReaderr=newBinaryReader(fs);//新建BinaryReader用于读数据. for(inti=0;i<11;i++){//从Test.data文件读出整数和字符串

Console.WriteLine(r.ReadInt32()+r.ReadString()); } r.Close(); fs.Close(); }}TextReader,StreamReader,StringReader类StreamReader

和StringReader是抽象基类TextReader的派生类,它们分别从流和字符串读取字符,使用这些派生类可打开一个文本文件以读取指定范围的字符,或基于现有的流创建一个读取器。StreamReader旨在以一种特定的编码输入字符,而Stream

类只用于字节的输入和输出。除非另外指定,StreamReader的默认编码为UTF-8。它们主要的方法有:ReadLine方法从当前流中读取一行字符并将数据作为字符串返回。ReadToEnd方法读取从当前位置到TextReader的结尾的所有字符,并将它们作为一个字符串返回。TextWriter为StreamWriter和StringWriter

的抽象基类。使用这些派生类,可以向流和字符串写入字符。Writeline方法写入参数指定的某些数据,后跟行结束符。流和文件下面是TextReader项目的部分代码:classTextRW{staticvoidMain(){TextWriterstringWriter=newStringWriter();WriteText(stringWriter);TextReaderstringReader=newStringReader(stringWriter.ToString());ReadText(stringReader);using(TextWriterstreamWriter=newStreamWriter("ErrPathChars.txt")) {WriteText(streamWriter);}using(TextReaderstreamReader=newStreamReader("ErrPathChars.txt")) {ReadText(streamReader);}}staticvoidWriteText(TextWritertextWriter){textWriter.WriteLine("无效的路径字符串:");textWriter.WriteLine(Path.InvalidPathChars);textWriter.Write('.');}staticvoidReadText(TextReadertextReader){Console.WriteLine("{0}-{1}",textReader.GetType().Name, textReader.ReadToEnd());}}File类File类用于文件典型的操作,如复制、移动、重命名、创建、打开、删除和追加等。也可将File类用于获取和设置文件属性或有关文件创建、访问。File类实际上就是根据文件名创建FileStream对象的工具类。由于所有的File方法都是静态的,所以如果只想执行一个操作,那么使用File方法的效率比使用相应的FileInfo实例方法可能更高。如果打算多次重用某个对象,可考虑改用FileInfo的相应实例方法。所有的File方法都要求当前所操作的文件的路径。流和文件AppendText

创建一个StreamWriter,它将UTF-8编码文本追加到现有文件。Copy

将现有文件复制到新文件。Create

在指定路径中创建文件。返回所创建的FileStreamCreateText

创建或打开一个文件用于写入UTF-8编码的文本。返回所创建的StreamWriter

Delete

删除指定的文件。如果指定的文件不存在,则不引发异常。Exists

确定指定的文件是否存在。Move

将指定文件移到新位置,并提供指定新文件名的选项。Open

打开指定路径上的FileStream。File类的主要方法

下面是使用File类Create、Delete和Copy静态方法进行创建,删除和复制文件的例子:classFileSample{ publicstaticvoidMain(){ stringpath=@"c:\Test.txt"; stringpath2=@"c:\TestCopy.txt"; using(FileStreamfs=File.Create(path)){}//新建空文件c:\Test.txt File.Delete(path2);//确保path2文件不存在,如有删除

File.Copy(path,path2);//c:\Test.txt复制到c:\TestCopy.txt }}FileInfo类

FileInfo类提供创建、复制、删除、移动和打开文件的实例方法,具有File类的大部分方法,下面是File类所没有包含的方法:Attributes

获取或设置文件属性的FileAttributes。Directory

获取父目录的实例。DirectoryName

获取表示目录的完整路径的字符串。Extension

获取表示文件扩展名部分的字符串。(从FileSystemInfo

继承。)FullName

获取目录或文件的完整目录。(从FileSystemInfo

继承。)Length

获取当前文件的大小。Name

获取文件名。流和文件classFileInfoSample{ publicstaticvoidMain(){ stringpath=@"c:\Test.txt"; FileInfofi1=newFileInfo(path); if(!fi1.Exists)fi1.Delete();//确保c:\Test.txt文件不存在,如有删除

using(StreamWritersw=fi1.CreateText())//新建用于写文件的StreamReader { sw.WriteLine("欢迎"); sw.WriteLine("学习C#.Net"); } using(StreamReadersr=fi1.OpenText())//新建读文件StreamReader { strings=""; while((s=sr.ReadLine())!=null){ Console.WriteLine(s);} } try { stringpath2=path+"temp"; FileInfofi2=newFileInfo(path2); fi2.Delete();//确保path2文件不存在,如有删除

fi1.CopyTo(path2);//c:\Test.txt复制到c:\Test.txttemp Console.WriteLine("{0}wascopiedto{1}.",path,path2); } catch(Exceptione){ Console.WriteLine("Theprocessfailed:{0}",e.ToString());} }}Directory类Directory类有用于创建、移动和枚举通过目录和子目录的静态方法。DirectoryInfo类与Directory类似,有用于创建、移动和枚举目录和子目录的实例方法。Path类也是用于文件或目录执行操作。Directory类的主要方法:CreateDirectory

创建指定路径中的所有目录。Delete

删除指定的目录。Exists

确定给定路径是否引用磁盘上的现有目录。GetCurrentDirectory

获取应用程序的当前工作目录。GetDirectories

获取指定目录中子目录的名称。GetFiles

返回指定目录中的文件的名称。GetLogicalDrives

检索此计算机格式为“<驱动器号>:\”的逻辑驱动器的名称。GetParent

检索指定路径的父目录,包括绝对路径和相对路径。流和文件 下面是使用Directory例子,该程序如果命令行参数是文件就显示文件名,如果是目录就分别处理其子目录和文件,DirectorySample项目代码如下:publicclassRecursiveFile{ publicstaticvoidMain(string[]args){//命令行参数存放文件或目录名如"c:\" foreach(stringpathinargs){//取每个命令行参数放入path if(File.Exists(path))//判断文件是否存在

ProcessFile(path);//处理文件

elseif(Directory.Exists(path))//判断目录是否存在

ProcessDirectory(path); } } publicstaticvoidProcessDirectory(stringtargetDirectory){//处理该目录所有文件

string[]fileEntries=Directory.GetFiles(targetDirectory); foreach(stringfileNameinfileEntries) ProcessFile(fileName); //迭代处理该目录中所有子目录

string[]subdirectoryEntries=Directory.GetDirectories(targetDirectory); foreach(stringsubdirectoryinsubdirectoryEntries) ProcessDirectory(subdirectory); } publicstaticvoidProcessFile(stringpath){ Console.WriteLine("处理的文件:'{0}'.",path);}}例:创建简单Windows资源管理器应用程序. 创建一个界面类似于Windows操作系统的资源管理器的应用程序,程序用户界面的左边是TreeView控件,显示用户计算机上文件夹目录的层次结构,右边是ListView显示左边选定文件夹目录所属的文件和文件夹目录。创建资源管理器程序的步骤如下:创建一个名为“treeViewAndlistviewApp”的Windows应用程序项目。设计程序界面如下图所示。在其Form1添加SplitContainer、ImageList、TreeView控件。使用文件系统目录Directory类与文件File类,以便将节点和子节点填充到TreeView中。在窗体Form1添加方法PopulateTreeView(),用于在界面左侧显示目录层次结构,代码如下:publicForm1(){InitializeComponent();PopulateTreeView();}privatevoidPopulateTreeView(){TreeNoderootNode;DirectoryInfoinfo=newDirectoryInfo(@"C:\");if(info.Exists){rootNode=newTreeNode(info.Name);rootNode.Tag=info;//DirectoryInfo实例info存在节点的TagGetDirectories(info.GetDirectories(),rootNode);treeView1.Nodes.Add(rootNode);}}//GetDirectories将目录数组添加为节点nodeToAddTo的子节点集privatevoidGetDirectories(DirectoryInfo[]subDirs,TreeNode nodeToAddTo){TreeNodeaNode;DirectoryInfo[]subSubDirs;foreach(DirectoryInfosubDirinsubDirs){aNode=newTreeNode(subDir.Name,0,0);aNode.Tag=subDir;//设置包含树节点有关数据的对象

subSubDirs=subDir.GetDirectories();if(subSubDirs.Length!=0) //递归执行GetDirectories将子目录添加为节点

GetDirectories(subSubDirs,aNode);nodeToAddTo.Nodes.Add(aNode);}}编写treeview1的NodeMouseClick事件处理代码,以便在单击某个节点时,用该节点的内容来填充listview1。voidtreeView1_NodeMouseClick(objectsender,TreeNodeMouseClickEventArgse){TreeNodenewSelected=e.Node;//当前目录节点

listView1.Items.Clear();//清除界面右侧列表内容

//获取存储在树节点Tag中的包含DirectoryInfo数据的对象

DirectoryInfonodeDirInfo=(DirectoryInfo)newSelected.Tag;

ListViewItem.ListViewSubItem[]subItems;ListViewItemitem=null;foreach(DirectoryInfodirinnodeDirInfo.GetDirectories()){item=newListViewItem(dir.Name,0);//以目录名做为项,0是目录图标序号

subItems=newListViewItem.ListViewSubItem[] {newListViewItem.ListViewSubItem(item,"目录"), newListViewItem.ListViewSubItem(item, dir.LastAccessTime.ToShortDateString())};//以“目录”,修改时间为子项

item.SubItems.AddRange(subItems);//添加子项ListViewSubItem[]listView1.Items.Add(item);}foreach(FileInfofileinnodeDirInfo.GetFiles()){item=newListViewItem(file.Name,1);//以文件名做为项,1是文件图标序号

subItems=newListViewItem.ListViewSubItem[] {newListViewItem.ListViewSubItem(item,"文件"), newListViewItem.ListViewSubItem(item, file.LastAccessTime.ToShortDateString())};//以"文件",修改时间做子项

item.SubItems.AddRange(subItems);//添加子项

listView1.Items.Add(item);//添加列表项

}listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);}.NET框架的XML编程概述XML(可扩展标记语言)是一种提供数据描述格式的标记语言,它提供用于描述结构化数据的格式。XML提供更准确的跨平台数据交换,XML实现了表示与数据的分离。在XML中,标记只用于描述数据,例如书名、出版社等。通过应用不同的样式表(例如,可扩展样式表语言(XSL)和层叠样式表(CSS))和应用程序,能够根据需要显示和处理数据。XML文档的格式如下,这是一个authors.xml文件的内容。.NET框架的XML编程XML文档<?xmlversion="1.0"?><books><book><author>Carson</author><priceformat="dollar">31.95</price><pubdate>05/01/2001</pubdate></book><pubinfo><publisher>MSPress</publisher><state>WA</state></pubinfo></books>.NET框架的XML编程.NET框架常用的xml类.NET框架具有设计一致、集成的XML类集,能够很容易生成支持XML的应用程序。.NET框架有以下常用的xml类:XmlReader类提供对XML数据进行快速、非缓存、顺序访问方式的读取器。XmlReader对象使用System.Xml.XmlReader.Create方法创建。通过XmlReaderSettings类可以指定要在所创建的XmlReader对象上启用的功能集。XmlWriter类提供生成包含XML数据的流或文件的非缓存、顺序访问方式的编写器。XmlDocument及其相关类基于W3C文档对象模型(DOM)。XPathNavigator类为定位和编辑XML数据提供游标模型。.NET框架的XML编程XML文档对象模型(DOM).NET框架的XML编程XML文档对象模型(DOM)类是XML文档的内存中表示形式。通过DOM可以编程读取、处理和修改XML文档。下图显示authors.xml文件DOM的文档结构图。XmlReader、XmlWriter读写XML文件 下例是XmlReadWrite项目,演示XML数据如何进行流式处理。先使用XmlReader读xml文件books.xml并分析XML数据,再使用XmlWriter写出该数据。.NET框架的XML编程classXmlReadWriteSample{staticvoidMain(){XmlWriterSettingswriterSettings=newXmlWriterSettings();writerSettings.Indent=true;//XML各元素将分别写入新行并将其缩进

XmlReaderSettingsreaderSettings=newXmlReaderSettings();readerSettings.IgnoreWhitespace=true;//该值指示忽略无关紧要的空白

using(XmlWriterwriter=XmlWriter.Create(Console.Out,writerSettings)){using(XmlReaderreader=XmlReader.Create(@"../../books.xml", readerSettings)){while(!reader.EOF){ if(reader.IsStartElement("price")){ //<price>8.99</price>,ReadElementContentAsDouble()返回8.99 doubleoriginalPrice=reader.ReadElementContentAsDouble();doublediscountedPrice=originalPrice-(originalPrice*0.25);writer.WriteStartElement("price");//写<price //写alternative="25%discount" writer.WriteAttributeString("alternative","25%discount");writer.WriteAttributeString("originalPrice", originalPrice.ToString());//写originalPrice="8.99"writer.WriteValue(discountedPrice);//写>6.7425writer.WriteEndElement();//写</price>}

else{WriteShallowNode(reader,writer);reader.Read(); } }}}}staticvoidWriteShallowNode(XmlReaderreader,XmlWriterwriter){switch(reader.NodeType){caseXmlNodeType.Element:writer.WriteStartElement(reader.Prefix,reader.LocalName, reader.NamespaceURI);//写XML的元素开始标记

writer.WriteAttributes(reader,true);//写出当前位置找到的所有属性

if(reader.IsEmptyElement)writer.WriteEndElement();//写XML的元素结束标记

break;caseXmlNodeType.Text://写给定的文本内容,即reader.Value,当前节点值

writer.WriteString(reader.Value);break;caseXmlNodeType.EndElement:writer.WriteFullEndElement();//写入完整的结束标记

break;}}}使用XmlDocument类处理XML数据

XmlDocument类包括用于检索和创建所有其他XML对象的成员。使用XmlDocument及其相关的类,可以构造XML文档、加载和访问数据、修改数据以及保存更改。 下例是XmlReadWrite项目代码,此示例演示如何使用基于W3C文档对象模型(DOM)的XmlDocument类修改XML文档。DOM是XML文档在内存中(缓存)的树形表示,它支持对文档进行浏览和编辑。此示例加载一个XmlDocument对象,修改XML数据并将更改保存到一个XML文件中:classModifyXmlDocumentSample{staticvoidMain(){XmlDocumentdoc=newXmlDocument();doc.Load("../../books.xml");//加载book.xml到XmlDocumentdoc.Save(Console.Out);//在控制台输出books.xml内容

DeleteBook(doc);//删除title=TheGorgias的bookdoc.Save(Console.Out);

.NET框架的XML编程

InsertBook(doc);//添加title='MobyDick'的bookdoc.Save(Console.Out);ModifyPrice(doc);//对所有的book增加price20%doc.Save(Console.Out);doc.Save("books.new.xml");//将XmlDocument内容保存到books.new.xml}staticvoidModifyPrice(XmlDocumentdoc){//对所有的book增加price20%foreach(XmlNodenodeindoc.SelectNodes("//price"))node.InnerText= (XmlConvert.ToDouble(node.InnerText)*1.2).ToString();}staticvoidDeleteBook(XmlDocumentdoc){//删除title=TheGorgias的bookstringxpath="/bookstore/book[title='TheGorgias']";XmlNodenode=doc.SelectSingleNode(xpath);node.ParentNode.RemoveChild(node);}

staticvoidInsertBook(XmlDocumentdoc){//添加title='MobyDick'的book XmlNodebookstore=doc.DocumentElement;//取根节点元素<bookstore> XmlElementbook=doc.CreateElement("book");//新建book节点元素

book.SetAttribute("genre","novel")//设置book节点元素属性genre=novelbook.SetAttribute("publicationdate","1998");//设置属性publicationdate=1998book.SetAttribute("ISBN","0-553-21311-03");//设置属性ISBN=0-553-21311-03 XmlElementtitle=doc.CreateElement("title");//新建节点元素titletitle.InnerText="MobyDick";//设置节点title的值为"MobyDick" book.AppendChild(title);//节点title加入book成为子节点

bookstore.AppendChild(book);//节点book加入根节点<bookstore>成为子节点

}}应用程序设置Settings应用程序设置可以动态地存储和检索应用程序的属性设置及其他信息,并且允许用户维护客户端计算机上的自定义应用程序和用户首选项。应用程序设置基于两种范围:应用程序范围和用户范围。应用程序范围的设置可以用于诸如数据库连接字符串这类的信息。由于这些值与应用程序关联,因此用户不能在运行时更改它们。用户范围的设置可以用于诸如存储界面的字体首选项等这类的信息。用户可以在运行时更改这些值。系统将应用程序设置存储在两个XML文件中:一个是app.config文件,它是创建应用程序设置时创建的;另一个是user.config文件,它是用户运行应用程序更改用户设置值时创建的。应用程序配置文件 下面通过实例来解释如何使用应用程序设置。下图是一个简单Windows程序界面,其中公司名是使用应用程序设置。编程步骤如下:新建一个名为SettingSample的C#windows应用程序项目。在“项目设计器”中添加应用程序设置CompanyName用于公司名,在“解决方案资源管理器”中选择SettingSample项目;在“项目”菜单上,单击“属性”。选择“设置”窗格,如下图所示:单击“设置”网格中的空白行。在“名称”列中输入设置的名称即CompanyName。从“类型”下拉列表中选择设置的数据类型,选择string。从“范围”下拉列表中选择设置的作用范围。设置的作用范围可以是“应用程序”,也可以是“用户”,选择“用户”。在“值”列中输入设置的默认值。该值必须与所选的数据类型匹配,输入“海尔公司”。然后关闭设置窗口。以上添加应用程序设置的操作将添加几个相关文件,第一是添加了应用程序配置文件App.Config,部分代码如下:<?xmlversion="1.0"encoding="utf-8"?><configuration><configSections>。。。

<userSettings><SettingSample.Properties.Settings><settingname="CompanyName"serializeAs="String"><value>海尔公司</value>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论