??xml version="1.0" encoding="utf-8" standalone="yes"?>在线观看亚洲天天一三视,337p日本欧洲亚洲大胆裸体艺术 ,亚洲免费视频播放http://www.tkk7.com/wuxufeng8080/category/12854.htmlzh-cnMon, 12 Mar 2007 04:49:21 GMTMon, 12 Mar 2007 04:49:21 GMT60路径Q文Ӟ目录QI/O常见操作汇?/title><link>http://www.tkk7.com/wuxufeng8080/articles/102751.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Fri, 09 Mar 2007 02:47:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/102751.html</guid><description><![CDATA[ <strong>摘要:<br /></strong>    文g操作是程序中非常基础和重要的内容Q而\径、文件、目录以及I/O都是在进行文件操作时的常见主题,q里xq些常见的问题作个ȝQ对于每个问题,量提供一些解x案,即没有你想要的{案Q也希望能提供给你一Ҏ益的思\Q如果你有好的徏议,恌能够留言Qɘq些内容更加完善?<br />    <span style="FONT-WEIGHT: bold">主要内容Q?br /></span>    一、\径的相关操作Q?如判断\径是否合法,路径cdQ\径的特定部分Q合q\径,pȝ文g夹\径等内容Q?br />    二、相关通用文g对话框,q些对话框可以帮助我们操作文件系l中的文件和目录Q?br />    三、文件、目录、驱动器的操作,如获取它们的基本信息Q获取和讄文g和目录的属性,文g的版本信息,<br />        搜烦文g和目录,文g判等Q复制、移动、删除、重命名文g和目录;<br />    四、读写文Ӟ包括临时文gQ随机文件名{;<br />    五、对文gpȝ的监视; <br />    q一就先写一下前两部分?br /><br />    <strong>一、\径相x?/strong><br />    问题1Q?span style="COLOR: #1f00fc">如何判定一个给定的路径是否有效/合法Q?/span><br />    解决ҎQ通过Path.GetInvalidPathChars或Path.GetInvalidFileNameCharsҎ获得非法的\?文g名字W,可以<br />    Ҏ它来判断路径中是否包含非法字W;<br /><br />    问题2Q?span style="COLOR: #1f00fc">如何定一个\径字W串是表C目录还是文Ӟ<br />    </span>解决ҎQ?br />    1、用Directory.Exists或File.ExistҎQ如果前者ؓ真,则\径表C目录;如果后者ؓ真,则\径表C文Ӟ<br />    2、上面的Ҏ有个~点是不能处理那些不存在的文g或目录。这时可以考虑使用Path.GetFileNameҎ获得<br />       其包含的文g名,如果一个\径不为空Q而文件名为空那么它表C目录,否则表示文gQ?br /><br />    问题3Q?span style="COLOR: #2000ff">如何获得路径的某个特定部分(如文件名、扩展名{)Q?/span><br />    解决ҎQ?br />    下面是几个相x法:<br />    Path.GetDirectoryName Q返回指定\径字W串的目录信息;<br />    Path.GetExtension Q?q回指定的\径字W串的扩展名Q?br />    Path.GetFileName Q?q回指定路径字符串的文g名和扩展名;<br />    Path.GetFileNameWithoutExtension Q返回不h扩展名的路径字符串的文g名;<br />    Path.GetPathRoot Q获取指定\径的根目录信息;<br />    Q更多内容还请参考MSDNQ?br /><br />    问题4Q?span style="COLOR: #2000ff">如何准确地合q两个\径而不用去担心那个烦h的”\”字W;</span><br />    解决ҎQ?br />    使用Path.CombineҎQ它会帮你处理烦人的”\”; <p>    问题5Q?span style="COLOR: #2000ff">如何获得pȝ目录的的路径Q如桌面Q我的文档,临时文g夹等Q;</span><br />    解决ҎQ?br />    主要是用System. Environmentcȝ相关属性和ҎQ?br />    Environment. SystemDirectory属性:获取pȝ目录的完全限定\径;<br />    Environment. GetFolderPathҎQ该Ҏ接受的参数类型ؓEnvironment.SpecialFolder枚DQ?br />    通过q个Ҏ可以获得大量pȝ文g夹的路径Q如我的电脑Q我的电脑,桌面Q系l目录等Q?br />    Q更多内容还请参考MSDNQ;<br />    Path.GetTempPathҎQ返回当前系l的临时文g夹的路径Q?/p><p>    问题6Q?span style="COLOR: #2000ff">如何判断一个\径是l对路径q是相对路径Q?/span><br />    解决ҎQ?br />    使用Path.IsPathRootedҎQ?/p><p>    问题7Q?span style="COLOR: #2000ff">如何d或设|当前目录;</span><br />    解决ҎQ?br />    使用DirectorycȝGetCurrentDirectory和SetCurrentDirectoryҎQ?/p><p>    问题8Q?span style="COLOR: #2000ff">如何使用相对路径Q?/span><br />    解决ҎQ?br />    讄当前目录后(见问?Q,可以用相对\径了。对于一个相对\径,我们可以<br />    使用Path.GetFullPathҎ获得它的完全限定路径Q绝对\径)?/p><p>    注意Q如果打用相对\径,你将工作目录讄为各个交互文件的共同LQ否则可能会引入<br />    一些不易发现的安全隐患Q被恶意用户利用来访问系l文件?br /><br />    更多内容Q?br />    通常我们可以使用System.IO.PathcL处理路径。该cL供了一套方法和属性用于对包含文g或目录\径信息的字符串执行操作,q些操作是以跨^台的方式执行的,而这些方法和属性都是静态的?/p><p>    注意路径仅仅是提供文件或目录位置的字W串。\径不必指向磁盘上的位|,例如Q\径可以映到内存中或讑֤上的位置。\径的准确格式是由当前q_定的。例如,在某些系l上Q\径可以驱动器h卷号开始,而此元素在其他系l中是不存在的。在某些pȝ上,文g路径可以包含扩展名,扩展名指C在文g中存储的信息的类型。文件扩展名的格式是与^台相关的Q例如,某些pȝ扩展名的长度限制ؓ 3 个字W,而其他系l则没有q样的限制。当前^台还定用于分隔路径中各元素的字W集Q以及确定在指定路径时不能用的字符集。因些差异,所?Path cȝ字段以及 Path cȝ某些成员的准行为是与^台相关的?/p><p>    路径可以包含l对或相对位|信息。绝对\径完整指定一个位|:文g或目录可被唯一标识Q而与当前位置无关。相对\径指定部分位|:当定位用相对路径指定的文件时Q当前位|用作v始点?/p><p>    Pathcȝ大多数成员不与文件系l交互,q且不验证\径字W串指定的文件是否存在。修改\径字W串的Path cL员(例如 ChangeExtensionQ对文gpȝ中文件的名称没有影响。但Path成员实验证指定路径字符串的内容Qƈ且如果字W串包含在\径字W串中无效的字符Q如 InvalidPathChars 中的定义Q,则引?ArgumentException异常。例如,在基?Windows 的桌面^CQ无效\径字W可能包括引?(")、小于号 (<)、大于号 (>)、管道符?(|)、退?(\b)、空 (\0) 以及?16 ?18 和从 20 ?25?Unicode 字符?/p><p>    Path cȝ成员使您可以快速方便地执行常见操作Q例如确定文件扩展名是否是\径的一部分Q以及将两个字符串组合成一个\径名?/p>    多数情况下,如果q些Ҏ接收了无效的路径会抛出异常,但如果\径名是因为包含了通配W(*?Q从而无效,则不会抛出异常(可以使用GetInvalidPathCharsҎ来非法的路径字符Q。我们可以根据该原则判断一个\径是否合法?br /><br />    <strong>二、相关的通用文g对话?/strong>    <p>    1?span style="COLOR: #2000ff">文gҎ览对话框</span>QFolderBrowserDialogc)<br />    用户可以通过该对话框览、新建ƈ选择文g夹,如下图:<br />    <img height="325" alt="" src="http://www.cnblogs.com/images/cnblogs_com/anderslly/FolderBrowserDialog.JPG" width="338" /><br /></p><p>    主要属性:<br />    DescriptionQ树视图控g上显C的说明文本Q如上图中的”选择要进行计的目录”;<br />    RootFolderQ获取或讄从其开始浏览的Ҏ件夹Q如上图中设|的我的电脑Q默认ؓ桌面Q;<br />    SelectedPathQ获取或讄用户选定的\径,如果讄了该属性,打开对话框时会定位到指定路径Q默认ؓҎ件夹Q关闭对话框时根据该属性获取用L户选定的\径;<br />    ShowNewFolderButtonQ获取或讄是否昄新徏对话框按钮;</p><p>    主要ҎQ?br />    ShowDialogQ打开该对话框Q返回gؓDialogResultcd|如果为DialogResult.OKQ则可以由SelectedPath属性获取用户选定的\径;<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    dlgOpenFolder.Description </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">选择要进行计的目录</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgOpenFolder.RootFolder </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Environment.SpecialFolder.MyComputer;<br />    dlgOpenFolder.ShowNewFolderButton </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br />    DialogResult result </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> dlgOpenFolder.ShowDialog(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (result </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> DialogResult.OK)<br />    {<br />        txtDirPath.Text </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> dlgOpenFolder.SelectedPath;<br />    }</span></div><p> </p><p>    2?span style="COLOR: #2000ff">打开文g对话?/span>QOpenFileDialogc)<br />    用户可以通过该对话框选择一个文Ӟ见下图:<br />    <img height="419" alt="" src="http://www.cnblogs.com/images/cnblogs_com/anderslly/OpenFileDialog.JPG" width="571" /><br /></p>    主要属性:<br />    CheckFileExistsQ该值指C如果用h定不存在的文件名Q对话框是否昄警告Q?br />    FileName(s)Q获取或讄一个包含在文g对话框中选定的文件名的字W串Q?br />    FilterQ获取或讄对话框的文gcd列表Q?br />    FilterIndexQ对话框的文件类型列表的索引Q基?的)Q?br />    InitialDirectoryQ获取或讄文g对话框显C的初始目录Q?br />    MultiselectQ该值指C对话框是否允许选择多个文gQ?br />    ShowReadOnlyQ该值指C对话框是否包含只读复选框Q?br />    TitleQ获取或讄文g对话框标题;<br />    主要ҎQ?br />    OpenFileQ打开用户选定的具?span style="COLOR: #2000ff">只读</span>权限的文Ӟ<br />    ShowDialogQ打开该模式对话框Q?<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    dlgOpenFile.Title </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">打开源文?/span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgOpenFile.InitialDirectory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">@"</span><span style="COLOR: #000000">C:\Inetpub\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgOpenFile.Filter </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">文本文g (*.txt)|*.txt|所有文件?*.*)|*.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgOpenFile.FilterIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br />    dlgOpenFile.ShowReadOnly </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br />    DialogResult dr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> dlgOpenFile.ShowDialog();<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (dr </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> DialogResult.OK)<br />    {<br />        </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> fileName = dlgOpenFile.FileName;<br />    }</span></div><p>    3?span style="COLOR: #2000ff">保存文g对话?/span>QSaveFileDialogc)<br />    用户可以通过该对话框保存一个文Ӟ见下图:<br />    <img height="422" alt="" src="http://www.cnblogs.com/images/cnblogs_com/anderslly/SaveFileDialog.JPG" width="571" /><br /></p><p>    主要属性:<br />    大部分与打开文g对话框类|此处略过Q下面几个值得注意Q?br />    CreatePromptQ该值指C如果用h定不存在的文Ӟ是否提示用户允许创徏该文Ӟ<br />    OverwritePromptQ该值指C如果用h定的文g名已存在Q对话框是否昄警告Q?br />    主要ҎQ?br />    OpenFileQ打开用户选定的具有读/写权限的文gQ?br />    ShowDialogQ打开该模式对话框Q?br />    CZ代码Q?br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    dlgSaveFile.Title </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">打开目标文g</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgSaveFile.InitialDirectory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">@"</span><span style="COLOR: #000000">C:\Inetpub\</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgSaveFile.Filter </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">文本文g (*.txt)|*.txt|所有文件?*.*)|*.*</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />    dlgSaveFile.FilterIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br />    DialogResult dr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> dlgSaveFile.ShowDialog();<br />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (dr </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> DialogResult.OK)<br />    {<br />        </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> fileName = dlgSaveFile.FileName;<br />    }</span></div><br />    xQ我们操作的都只是\径,要知道,q些路径仅仅是字W串Q还没有涉及到文件系l中的真实文件。下一中会详l了解有x件和目录的相x作?br /><br /><strong><br /><br />摘要:<br /></strong>    文g操作是程序中非常基础和重要的内容Q而\径、文件、目录以及I/O都是在进行文件操作时的常见主题,q里xq些常见的问题作个ȝQ对于每个问题,量提供一些解x案,即没有你想要的{案Q也希望能提供给你一Ҏ益的思\Q如果你有好的徏议,恌能够留言Qɘq些内容更加完善?<br />    主要内容Q?br />    一、\径的相关操作Q?如判断\径是否合法,路径cdQ\径的特定部分Q合q\径,pȝ文g夹\径等内容Q?br />    二、相关通用文g对话框,q些对话框可以帮助我们操作文件系l中的文件和目录Q?br />    三、文件、目录、驱动器的操作,如获取它们的基本信息Q获取和讄文g和目录的属性,文g的版本信息,<br />        搜烦文g和目录,文g判等Q复制、移动、删除、重命名文g和目录;<br />    四、读写文Ӟ包括临时文gQ随机文件名{;<br />    五、对文gpȝ的监视;<br /><br />    <a title="路径的相x? style="COLOR: #e210ff" target="_blank">上一?/a>介绍了第一、二部分Q这一介l一下最重要的第三部分?br />    <br />    <span style="FONT-WEIGHT: bold">三、文件和目录相关操作</span><br />    文g和目录操作涉及的cM要是QFileInfo,DirectoryInfo,DriveInfoQ可以认为它们的一个实例对应着一个文件、目录、驱动器。它们的用法cMQ一般是文件、目录或驱动器的路径作ؓ参数传递给相应的构造函数创Z个实例,然后讉K它们的属性和Ҏ?br />    注意下面几点Q?br />    FileInfo cd DirectoryInfo c都l承自抽象类 FileSystemInfo Q?FileSystemInfo cd义了一些通用的属性,?CreationTime ?Exists {。但 DriveInfo cL有?FileSystemInfo c,所以它也就没有上面提到的那些通用属性了?br /><br />    FileInfo cd DirectoryInfo cȝ对象公开的属性值都是第一ơ查询时获取的|如果在以此查询之后文件或目录发生了改动,必调用它们的 Refresh Ҏ来更新这些属性。但 DriveInfo 则无需q么做,它的属性每ơ都会读取文件系l最新的信息?br /><br />    在创建文件、目录或驱动器的实例Ӟ如果使用了一个不存在的\径,q不会报错,q是你得C个对象,该对象表CZ个ƈ不存在的实体Q这意味着它的 Exists 属性(对于 DriveInfo 来说?IsReady 属性)gؓ false 。你仍然可以操作该实体,但如果尝试其它的大多数属性,׃引发相应?FileNotFoundException ?DirectoryNotFoundException ?DriveNotFoundException 异常?br /><br />    另外Q还可以使用 File / Directory c,q两个类的成员都是静态方法,<span style="COLOR: #ff2074">所以如果只x行一个操?/span>Q那么?File/Directory 中的静态方法的效率比用相应的 FileInfo / DirectoryInfo中的 实例Ҏ可能更高。所有的 File / Directory Ҏ都要求当前所操作的文?/ 目录的\径?注意Q?File / Directory cȝ静态方法对所有方法都执行安全查?span style="COLOR: #ff2074">如果打算多次重用某个对象</span>Q可考虑改用 FileInfo / DirectoryInfo 的相应实例方法,因ؓq不L需要安全检查?  <p>    下面是一些常见的问题Q?br />    问题1Q?span style="COLOR: #2000ff">如何获取指定文g的基本信息;</span><br />    解决ҎQ可以用FileInfocȝ相关属性:<br />    FileInfo.ExistsQ获取指定文件是否存在;<br />    FileInfo.NameQFileInfo.ExtensioinQ获取文件的名称和扩展名Q?br />    FileInfo.FullNameQ获取文件的全限定名Uͼ完整路径Q;<br />    FileInfo.DirectoryQ获取文件所在目录,q回cd为DirectoryInfoQ?br />    FileInfo.DirectoryNameQ获取文件所在目录的路径Q完整\径)Q?br />    FileInfo.LengthQ获取文件的大小Q字节数Q;<br />    FileInfo.IsReadOnlyQ获取文件是否只读;<br />    FileInfo.AttributesQ获取或讄指定文g的属性,q回cd为FileAttributes枚DQ可以是多个值的l合Q见问题2Q;<br />    FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTimeQ分别用于获取文件的创徏旉、访问时间、修Ҏ_<br />    Q更多内容还请参考MSDNQ?br /></p><p>    问题2Q?span style="COLOR: #2000ff">如何获取和设|文件的属性,比如只读、存档、隐藏等Q?/span><br />    解决ҎQ?br />    使用FileInfo.Attributes属性可以获取和讄文g的属性,该属性类型ؓFileAttributes枚DQ该枚D的每个DCZU属性,FileAttributes枚Dh属性(AttributeQFlagsAttributeQ所以该枚D的值可以进行组合,也就是一个文件可以同时拥有多个属性。下面看看具体的做法Q?br />    获取属性,比如判断一个文件是否是只读的:<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 当文件具有其它属性时Q这U做法会p|</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (file.Attributes </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> FileAttributes.ReadOnly)<br />    {<br />        chkReadonly.Checked </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br />    }<br /><br />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> q种写法׃会有问题了,它只查只d?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ((file.Attributes </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> FileAttributes.ReadOnly) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> FileAttributes.ReadOnly)<br />    {<br />        chkReadonly.Checked </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br />    }</span></div><br /><p>    讄属性,比如d和移除一个文件的只读属性:<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (chkReadonly.Checked)<br />    {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> d只读属?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        file.Attributes </span><span style="COLOR: #000000">|=</span><span style="COLOR: #000000"> FileAttributes.ReadOnly;<br />    }<br />    </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br />    {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> U除只读属?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        file.Attributes </span><span style="COLOR: #000000">&=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">FileAttributes.ReadOnly;<br />    }</span></div><p>    问题3Q?span style="COLOR: #2000ff">如何获取文g的版本信息(比如版本P版权声明Q公司名U等Q;</span><br />    解决ҎQ?br />    使用FileVersionInfoc,该类有大量的版本信息相关的属性。通过它的静态方法GetVersionInfo获得该类的一个实例,然后可以访问指定文件的版本信息了,非常方便。如FileVersion表示文g版本PLegalCopyright表示指定文g的版权声明,CompanyName表示指定文g的公司名U。(更多内容q请参考MSDNQ?/p><p>    问题4Q?span style="COLOR: #2000ff">如何判断两个文g的内Ҏ否相同(_匚wQ;</span><br />    解决ҎQ?br />    使用System.security.Cryptography.HashAlgorithmcMؓ每个文g生成一个哈希码Q然后比较两个哈希码是否一致?br />    在比较文件内容的时候可以采用好几种Ҏ。例如,查文件的某一特定部分是否一_如果愿意Q你甚至可以逐字节读取文Ӟ逐字节进行比较。这两种Ҏ都是可以的,但在某些情况下,q是使用哈希码算法更为方ѝ?br />    该算法ؓ一个文件生成一个小的(通常Uؓ20字节Q二q制”指U”(binary fingerprintQ。从l计学角度看Q不同的文g不可能生成相同的哈希码。事实上Q即使是一个很的改动Q比如,修改了源文g中的一个bitQ,也会?0Q的几率来改变哈希码中的每一个bit。因此,哈希码常常用于数据安全方面?br />    要生成一个哈希码Q你必须首先创徏一个HashAlgorithm对象Q而这通常是调用HashAlgorithm.CreateҎ来完成的Q然后调用HashAlgorithm.ComputeHashҎQ它会返回一个存储哈希码的字节数l。代码如下:<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><summary></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> 判断两个文g内容是否一?br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"></summary></span><span style="COLOR: #808080"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> IsFilesEqual(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> fileName1, </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> fileName2)<br />    {<br />        </span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> (HashAlgorithm hashAlg </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> HashAlgorithm.Create())<br />        {<br />            </span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000"> (FileStream fs1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileStream(fileName1, FileMode.Open), fs2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileStream(fileName2, FileMode.Open))<br />            {<br />                </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] hashBytes1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> hashAlg.ComputeHash(fs1);<br />                </span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[] hashBytes2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> hashAlg.ComputeHash(fs2);<br /><br />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 比较哈希?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">                </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> (BitConverter.ToString(hashBytes1) </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> BitConverter.ToString(hashBytes2));<br />            }<br />        }<br />    }</span></div><br /><p>    问题5Q?span style="COLOR: #2000ff">如何获取指定目录的基本信息;</span><br />    解决ҎQ可以用DirectoryInfocȝ相关属性和ҎQ?br />    DirectoryInfo.ExistsQ获取指定目录是否存在;<br />    DirectoryInfo.NameQ获取目录的名称Q?br />    DirectoryInfo.FullNameQ获取目录的全限定名Uͼ完整路径Q;<br />    DirectoryInfo.AttributesQ获取或讄指定目录的属性,q回cd为FileAttributes枚DQ可以是多个值的l合Q ?<br />    DirectoryInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTimeQ分别用于获取目录的创徏旉、访问时间、修Ҏ_<br />    DirectoryInfo.ParentQ获取目录的上目录Q返回类型ؓDirectoryInfoQ?br />    DirectoryInfo.RootQ获取目录的根目录,q回cd为DirectoryInfoQ?br /></p><p>    问题6Q?span style="COLOR: #2000ff">如何获取指定目录包含的文件和子目录;</span><br />    解决ҎQ?br />    DirectoryInfo.GetFiles()Q获取目录中Q不包含子目录)的文Ӟq回cd为FileInfo[]Q支持通配W查找;<br />    DirectoryInfo.GetDirectories()Q获取目录(不包含子目录Q的子目录,<br />        q回cd为DirectoryInfo[]Q支持通配W查找;<br />    DirectoryInfo. GetFileSystemInfos()Q获取指定目录下Q不包含子目录)的文件和子目录,<br />        q回cd为FileSystemInfo[]Q支持通配W查找;<br /></p><p>    问题7Q?span style="COLOR: #2000ff">如何获得指定目录的大;</span><br />    解决ҎQ?br />    查目录内的所有文Ӟ利用FileInfo.Length属性获取每个文件的大小Q然后进行合计,然后使用递归法处理所有的子目录的文gQ参考下面代码:<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><summary></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> 计算一个目录的大小<br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"></summary></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><param name="di"></span><span style="COLOR: #008000">指定目录</span><span style="COLOR: #808080"></param></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><param name="includeSubDir"></span><span style="COLOR: #008000">是否</span><span style="COLOR: #008000">包含子目?/span><span style="COLOR: #808080"></param></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><returns></returns></span><span style="COLOR: #808080"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> CalculateDirSize(DirectoryInfo di, </span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000"> includeSubDir)<br />    {<br />        </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> totalSize </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 查所有(直接Q包含的文g</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        FileInfo[] files </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> di.GetFiles();<br />        </span><span style="COLOR: #0000ff">foreach</span><span style="COLOR: #000000"> (FileInfo file </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> files)<br />        {<br />            totalSize </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> file.Length;<br />        }<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 查所有子目录Q如果includeSubDir参数为true</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (includeSubDir)<br />        {<br />            DirectoryInfo[] dirs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> di.GetDirectories();<br />            </span><span style="COLOR: #0000ff">foreach</span><span style="COLOR: #000000"> (DirectoryInfo dir </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> dirs)<br />            {<br />                totalSize </span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000"> CalculateDirSize(dir, includeSubDir);<br />            }<br />        }<br /><br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> totalSize;<br />    }</span></div><p>    问题8Q?span style="COLOR: #2000ff">如何使用通配W搜索指定目录内的所有文Ӟ</span><br />    解决ҎQ?br />    使用DirectoryInfo.GetFilesҎ的重载版本,它可以接受一个过滤表辑ּQ返回FileInfo数组Q另外它的参数还可以指定是否对子目录q行查找。如Q?br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    dir.GetFiles("</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">.txt"Q?SearchOption.AllDirectories);</span></div><p>    问题9Q?span style="COLOR: #2000ff">如何复制、移动、重命名、删除文件和目录Q?/span><br />    解决ҎQ用FileInfo和DirectoryInfocR?br />    下面是FileInfocȝ相关ҎQ?br />    FileInfo.CopyToQ将现有文g复制到新文gQ其重蝲版本q允许覆盖已存在文gQ?br />    FileInfo.MoveToQ将指定文gUdC|,q提供指定新文g名的选项Q所以可以用来重命名文gQ而不改变位置Q;    FileInfo.DeleteQ永久删除文Ӟ如果文g不存在,则不执行M操作Q?br />    FileInfo.ReplaceQ用当前FileInfo对象对应文g的内Ҏ换目标文Ӟ而且指定另一个文件名作ؓ被替换文件的备䆾Q微软考虑实在周到?/p><p>    下面是DirectoryInfocȝ相关ҎQ?br />    DirectoryInfo.CreateQ创建指定目录,如果指定路径中有多目录不存在,该方法会一一创徏Q?br />    DirectoryInfo.CreateSubdirectoryQ创建当前对象对应的目录的子目录Q?br />    DirectoryInfo.MoveToQ将目录Q及其包含的内容Q移动至一个新的目录,也可用来重命名目录;<br />    DirectoryInfo.DeleteQ删除目录(如果它存在的话)。如果要删除一个包含子目录的目录,要用它的重载版本,以指定递归删除?br /></p><p>    注意C没有QDirectoryInfocd了一个CopyToҎQ不q我们可以通过递归来实现这个功能:<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><summary></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> 复制目录到目标目?br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"></summary></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><param name="source"></span><span style="COLOR: #008000">源目?/span><span style="COLOR: #808080"></param></span><span style="COLOR: #008000"><br />    </span><span style="COLOR: #808080">///</span><span style="COLOR: #008000"> </span><span style="COLOR: #808080"><param name="destination"></span><span style="COLOR: #008000">目标目录</span><span style="COLOR: #808080"></param></span><span style="COLOR: #808080"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CopyDirectory(DirectoryInfo source, DirectoryInfo destination)<br />    {<br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 如果两个目录相同Q则无须复制</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (destination.FullName.Equals(source.FullName))<br />        {<br />            </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br />        }<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 如果目标目录不存在,创徏?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">destination.Exists)<br />        {<br />            destination.Create();<br />        }<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 复制所有文?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        FileInfo[] files </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> source.GetFiles();<br />        </span><span style="COLOR: #0000ff">foreach</span><span style="COLOR: #000000"> (FileInfo file </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> files)<br />        {<br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 文件复制到目标目录</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            file.CopyTo(Path.Combine(destination.FullName, file.Name), </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br />        }<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 处理子目?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        DirectoryInfo[] dirs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> source.GetDirectories();<br />        </span><span style="COLOR: #0000ff">foreach</span><span style="COLOR: #000000"> (DirectoryInfo dir </span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000"> dirs)<br />        {<br />            </span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000"> destinationDir </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Path.Combine(destination.FullName, dir.Name);<br /><br />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 递归处理子目?/span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">            CopyDirectory(dir, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> DirectoryInfo(destinationDir));<br />        }<br />    }</span></div><p> </p><p>    问题10Q?span style="COLOR: #2000ff">如何获得计算机的所有逻辑驱动器;</span><br />    解决ҎQ用DriveInfoc(需?NET 2.0Q?br />    DriveInfo.GetDrives()Q获得计机的所有逻辑驱动器,q回cd为DriveInfo[]Q?<br /></p><p>    问题11Q?span style="COLOR: #2000ff">如何获取指定驱动器的信息Q?/span><br />    解决ҎQ?br />    DriveInfo.NameQ获取驱动器的名Uͼ如C:\Q;<br />    DriveInfo.DriveTypeQ获取驱动器的类型(如FixedQCDRomQRemovableQNetwork{)Q?br />    DriveInfo.DriveFormatQ获取驱动器的格式(如NTFSQFAT32QCDFSQUDF{)Q?br />    DriveInfo.IsReadyQ获取驱动器是否已准备好Q比如CD是否已放入CD驱动器,如果驱动器没有准备好Q访问其信息会引发IOExceptioncd异常Q?br />    DriveInfo.AvailableFreeSpaceQ获取驱动器的可用空_<br />    DriveInfo.TotalFreeSpaceQ获取驱动器ȝ可用I间Q它与AvailableFreeSpace的不同在于AvailableFreeSpace会磁盘配额的讄Q?br />    DriveInfo.TotalSizeQ获取驱动器ȝI间Q?br />    DriveInfo.RootDirectoryQ获得驱动器的根目录QDirectoryInfocdQ;</p><p>    xQ我们已l了解了文g和目录相关的一些基本操作。但q不清楚如何去读写文件的内容Q下一中会详l了解这斚w的操作。?</p><img src ="http://www.tkk7.com/wuxufeng8080/aggbug/102751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2007-03-09 10:47 <a href="http://www.tkk7.com/wuxufeng8080/articles/102751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c#行列转换http://www.tkk7.com/wuxufeng8080/articles/102746.html风h?/dc:creator>风h?/author>Fri, 09 Mar 2007 02:03:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/102746.html写了一天,做出来才知道没有那么难?/div>
我还向我的朋友求助,向主任请教,获得了很多版本,下面我把代码列出Q和大家一起分享?/div>
我要感谢我的朋友和他的项目经理,q有我的MQ?/div>
 
W一?/div>
#region change hang lie in DataSet out DataSet 
       
  public  DataSet changehl(DataSet mm)
  {
   try
      {
       int h=mm.Tables[0].Rows.Count;
       int l=mm.Tables[0].Columns.Count;    
       DataSet myDataSet = new DataSet();
       DataTable namesTable= new DataTable();        
       for(int i=0; i<h; i++)
       { 
        namesTable.Columns.Add(mm.Tables[0].Rows[i][0].ToString ());
        }         
       for(int i=0;i<l;i++)
       {     
        DataRow r;
        r=namesTable.NewRow();         
        for(int j=0;j<h;j++)    
       {       
        r[j] = mm.Tables[0].Rows[j][i].ToString();         
       }
        if (i==0)
        {}
        else
       {
        namesTable.Rows.Add(r); 
       }
    }
    myDataSet.Tables.Add(namesTable);      
       
    return myDataSet;
   }   
   catch(Exception ex)
   {
    return mm ;
    }
   
  }
  #endregion
 
 
W二?/div>
 
#region change hang lie in DataGrid out DataSet 
 
private DataSet dataGridChangeRC(DataGrid ss )
  {
   DataSet myDataSet = new DataSet();
   try
   {
    int h=ss.Items.Count;
    int l=ss.Items[0].Cells.Count;
    string[,] ary=new string[h,l];
    for(int i=0;i<h;i++)
    {
     for(int j=0;j<l;j++)
     {
      ary[i,j]=ss.Items[i].Cells[j].Text.Trim().ToString () ;
     }
    }
    DataTable namesTable= new DataTable(); 
    for(int i=0; i<h; i++)
    { 
     namesTable.Columns.Add(ary[i,0]);
    } 
    for(int i=0;i<l;i++)
    {     
     DataRow r;
     r=namesTable.NewRow();         
     for(int j=0;j<h;j++)    
     {       
      r[j] = ary[j,i];       
     }
     if (i==0)
     {}
     else
     {
      namesTable.Rows.Add(r); 
     }
    }
    myDataSet.Tables.Add(namesTable);      
    return myDataSet;
   }
   catch(Exception ex)
   {
       return myDataSet;
   }
  }
 #endregion
 
W三?/div>

  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Text;
  using System.Windows.Forms;
  namespace Win_form
  {
     public partial class DataSet : Form
         {
          public DataSet()
          {
           InitializeComponent();
          }
          #region change hang lie

          public static DataSet changehl(DataSet mm)
          {
           try
           {
            int sourceRowsCount = mm.Tables[0].Rows.Count;
            int sourceColumnsCount = mm.Tables[0].Columns.Count;
            DataSet destinationDataSet = new DataSet();
            DataTable destinationTable = new DataTable();
            #region initialize destination table
            for (int i = 0; i < sourceRowsCount; i++)
            {
            destinationTable.Columns.Add(Convert.ToString(i));
            }
            destinationTable.Rows.Count = sourceColumnsCount;
            #endregion
            #region reverse source table to destination table Using Two Dimension Matrix Reverse Arithmetic
            int dcIndex;//the column number of each destination table row
            int srIndex;//the row number of each source table column
            int drIndex;
            int scIndex;
            for (dcIndex = 0, srIndex = 0;
             dcIndex < destinationTable.Columns.Count
             && srIndex < sourceRowsCount; dcIndex++, srIndex++)
            {
             for (drIndex = 0,scIndex=0;
              drIndex < destinationTable.Rows.Count
              && scIndex < sourceColumnsCount; drIndex++, scIndex++)
             {
              destinationTable.Rows[drIndex][dcIndex] = mm.Tables[0].Rows[srIndex][scIndex];
             }
            }
            #endregion
            destinationDataSet.Tables.Add(destinationTable);
            return destinationDataSet;
           }
           catch (Exception ex)
           {
            MessageBox.Show(ex.ToString());
           }
          }
          #endregion
         }
  }
 
W四?/div>
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DataSetConvert
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void RowtoCollumn()
        {
            DataSet sourceDataSet = new DataSet();
            DataSet destinationDataSet = new DataSet();
            int sourceRowCount = sourceDataSet.Tables[0].Rows.Count;
            int destinationColCount = sourceRowCount;
            int sourceColCount = sourceDataSet.Tables[0].Columns.Count;
            int destinationRowCount = sourceColCount;
            for(int i=0;i<destinationRowCount;i++)
                    for (int j=0; j < destinationColCount; j++)
                    {
                        destinationDataSet.Tables[0].Rows[i][j]=sourceDataSet.Tables[0].Rows[j][i];
                    }  
        
         }
    }
}
 
W一版和W二版是Z web做的W一版可以做为class和dll W二版只可以做class 我试q生成dll 不行 W三版和W四?是我朋友和他的项目经理做?是在windows form 中做?/div>

]]>C#索当前运行进E?q关?http://www.tkk7.com/wuxufeng8080/articles/89485.html风h?/dc:creator>风h?/author>Fri, 22 Dec 2006 04:02:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/89485.html使用语言:C#
E序用?索当前Windowsq行的进E?q可以执行关?
详细源码:

代码

using System;

namespace st_Face_GoRush
{
    class Program
    {
        public static void Main(string[] args)
        {
            //开始?br />        System.Int16 i;
            System.String StrNameID;
            System.Diagnostics.Process[] ShowID = System.Diagnostics.Process.GetProcesses();
            for (i = 0; i < ShowID.Length; i++)
                System.Console.WriteLine(ShowID[i].ProcessName + " " + ShowID[i].Id);
            System.Threading.Thread.Sleep(200);
            System.Console.Write("误入你要关闭的q程名称: ");
            StrNameID = System.Convert.ToString(System.Console.ReadLine());
            System.Diagnostics.Process[] CloseID = System.Diagnostics.Process.GetProcessesByName(StrNameID);
            //
            if (CloseID.Length != 0)
            {
                for (i = 0; i < CloseID.Length; i++)
                {
                    if (CloseID[i].Responding && !CloseID[i].HasExited)
                    {
                        System.Console.WriteLine("指定q程存在而且正在响应?..正在关闭.");
                        CloseID[i].CloseMainWindow();
                        if (!CloseID[i].HasExited)
                        {
                            System.Console.WriteLine("׃特别原因无法关闭q程,现在强制关闭!!!");
                            CloseID[i].Kill();
                        }
                    }
                    else
                    {
                        System.Console.WriteLine("指定q程存在但无法响?..正在强制关闭!");
                        CloseID[i].Kill();
                    }
                }
            }
            else
                System.Console.WriteLine("指定q程不存在无法关?L认输入正?");
        }

    }
}


]]>
如何在ASP.NET中用OWCl制图表 http://www.tkk7.com/wuxufeng8080/articles/87617.html风h?/dc:creator>风h?/author>Thu, 14 Dec 2006 01:25:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/87617.html

在开发应用程序时Q经怼遇到必须提供交互式图表的情况。例如,你可能在开发一个管理销售和产品数据的应用程序,数据保存在SQL Server数据库上Q应用程序允许用h加数据、更新现有数据,但除了这些功能之外,客户q要求应用程序能够用饼图、柱形图或XY散点囄形式直观地描q数据。?/p>

在Windows桌面应用E序中,q类要求从来不成为问题,可供选用的图形库和绘囄件实在太多了。但对于Web应用E序Q问题就变得复杂多了。要在Web应用中绘制图表,可供选择的办法包括: 

■ 客LQ?/p>

利用各种ActiveXlgQWeb览器内完全有可能达到“丰富”Windows客户E序那样的功能。缺Ҏ客户端的讄复杂化,要求发布客户端YӞ通常按照每客L的方式计许可证费用。另外,非MS Windows/IE的客L一般难以运行。?/p>

■ 服务器端: 

利用Web服务器上q行的服务器端代码,动态地生成图表Q然后以GIF或JPG囑Ş的Ş式发送给客户端。这U办法的优点是,客户端只需要一个标准的览器。与客户端技术相比的~点是,囑Ş的交互能力差Q除非向服务器提交新的请求,否则׃能羃放、滚动)。许多地囄站(例如Mapquest.comQ大量地q用了这一技术。注意,地图囑Ş不是保存在Web服务器上Q而是用户发出一个请求时动态从地图数据库生成。?/p>

本文主要讨论如何利用服务器端的图表绘制技术在ASP.NET Web面中提供图形功?/p>

二、设|图表引擎?/p>

如果要在ASP.NET应用E序中绘制图表,必须要有一个合适的图表引擎。ASP.NET有一个内建的囑Ş工具库,即System.Drawing名称I间的GDI+Q可以用来创建简单的饼图、柱形图、折U图{,不过它属于低U的APIQ算不上l制图表的引擎,特别是不适合l制复杂的图表。?br />   本文要讨论的主角是OWCQ即Office Web ComponentsQ或者“Office Weblg”。按照微软的定义QOWC是一U“将cMOffice的功能扩展到Web的微软技术”。它可以在客L使用Q例如我们将Excel工作表保存ؓWeb面时就要用刎ͼ利用它可以方便地交互式电子表格和图表发布到Web面。同ӞOWC也是一个优U的服务器端图表引擎,h与MS Excel同样强大的图表绘制能力。?/p>

三、OWC的许可证问题 

如果你曾l用q版本较早的OWCQ可能已l遇到过微Y的许可证问题。以前这个问题相当o人烦|微Y不仅要求服务器上必须有Office许可证,而且每一台客户PC上也同样要有。?/p>

实际上,q相当于OWC的用途局限到了Intranet之内Q只有Intranet之内才可以保证客户PC上都安装了Office许可证。不q现在微软的态度有所攄——服务器上仍旧要安装Office许可证,但只要图表是“非交互式”用途,例如本文的服务器端图表绘Ӟ客户端就不必再装Office许可证。实际上Q就q服务器端也不必安装完整的Office许可证,Excel 2002或FrontPage 2002的许可证已_Q从而OWC变成了h廉物的服务器端图表引擎。?/p>

那么Q在服务器上安装MS OfficeQ不Q没有必要。虽然从许可证条件看QOWC应该是Office的一部分Q但从技术上_OWC是一个独立的产品。Web服务器上只需安装OWC软g包,不必安装整个Office。?/p>

OWC首次出现于Office 2000Q即OWC 9.0。在Office XP中,OWC的编E模式已作了修改Q这使得OWC XPQ也是OWC 10Q不能与OWC 9.0完全兼容。OWC 10要求在ASP.NET环境中运行,所以OWC 10软g包必d装到ASP.NET服务器上。?/p>

接下来,很自然的一个问题是Q哪里可以下载OWC 10软g包?令h惊奇的是Q它可以从微软的|站免费下蝲Q地址?a target="_blank">http://office.microsoft.com/downloads/2002/owc10.aspxQ?br />(中文地址Q?a target="_blank">http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=982B0359-0A86-4FB2-A7EE-5F3A499515DD |际子?但要注意的是QWeb服务器上必须安装了某UOffice 2002的许可证才能合法C用OWC 10。?/p>

四、OWC的运行机制?/p>

OWC是一lCOMQActiveXQ控件的集合Q涵盖电子表根{图表、数据透视表等功能。它l常被当作客L技术用,q时COM控g安装在客户端PC上。如果在服务器端使用Qh们主要感兴趣的是它的图表l制功能。?/p>

有了OWCQ我们可以在ASP.NET Web服务器上动态创Z个图表,然后图表以GIF囑Ş的Ş式发送到客户端。客L看到的仅仅是一个普通的囑Ş文gQ但在“背后”,囑Ş文g实际上是由服务器上ASP.NET回应客户h时动态生成的。因此,q种技术对客户端没有特D的要求Q只要能够显CGIF囑Ş可以了Q即使Netscape和Opera也不存在M问题。?/p>

既然如此Qؓ什么在ASP.NET开发领域中QOWCq一优秀的微软技术尚未被q泛采用呢?微YҎ不ؓOWC作市场宣传,再加上o惑的许可证问题,当然令许多开发者望而却步。也许微软认产品q没有完全成熟,卛_到来的Office 2003会带来OWC 11Q它的编E模式还会有所改变。另外,q有一U可能是微Y担心OWC技术的q泛采用会媄响Office的销售。?/p>

再者,关于OWC的编E实例很。微软知识库有几个客L的例子和“传l”ASP的服务器端例子,但找不到在ASP.NET环境中用OWC 10的例子。OWC的新ȝQmicrosoft.public.office.developer.web.componentsQ主要讨论的也是客户端的应用。如果你要在ASP.NET环境中用OWC 10Q主要还是靠自己摸烦。正是因些原因,所以本文从相当q泛的角度探讨了该技术的实际应用。?/p>

五、在Web服务器上安装OWC 10 

要想在ASP.NET Web服务器上用OWCl制图表Q首先应当安装必要的软g和修改一些配|。?/p>

W一QWeb服务器上当然应该有ASP.NETq行环境。除?NET Framework RedistributableQ还要有GACUTILE序Q属?NET框架SDKQ来配置OWC控gQ也是_q要安装.NET Framework SDK工具。如果把.NET Framework 1.1 Redistributable和SDK安装C默认目录QPATH环境变量的内容应当包含:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin。?/p>

接下来再在Web服务器上安装OWC 10。OWC可以从微软免费下载,安装时只要采用所有默认选项卛_。?/p>

׃OWC 10是一UCOM技术,Z?NET代码使用OWC 10lgQ还必须安装Office XP的Primary Interop AssemblyQPIAQ,PIA可以从微软网站下载(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/odc_oxppias.aspQ?br />(|际子发现的地址是:http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en)
下蝲得到的OXPPIA.exe是一个压~文Ӟ现在把它解压~到服务器上的一个目录,假设是C:\oxppiaQ然后启动一个命令窗口(注意Q确保PATH环境变量已正设|[|际子注:可以用我作的SETPATH.BATq行一下]Q,转到c:\oxppia目录Q运行REGISTER.bat。?/p>

q个命o把Office XP PIA导入到全局E序集缓冲区Q修Ҏ册表讄。注意观察REGISTER.bat命o的输出,信GACUTIL命o实在运行。如果PATH环境变量讄有误QPIA不可能正导入。README文档说应当用VS.NET命o行环境,但Web服务器上可能没有安装VS.NETQ这时就要手工修改PATH环境变量了(效果一P。?/p>

最后,q要把下面这行代码加入Web服务器的machine.config文g?lt;assemblies>节,对于.NET Framework 1.1Qmachine.config文g可以在C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG目录下找刎ͼ 


<add assembly="Microsoft.Office.Interop.OWC, Version=10.0.4504.0, 
     Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
 

子注明Q如果发生不能编译的错误Q可能要再次q行注册步骤Q我q里q样Q大家如果不一P可以自己试试?/p>

六、OWC~程模式 
   要生成图表的数据UCؓ数据原,Chart Componentlg支持的数据源有:实现IDataSource接口的Q何数据源QADO Recordset对象QXML文gQ数l或者一定格式的文本字符丌Ӏ在ASP中,我们可以用ADO Recordset对象Q在.NET的ADO.NET中,׃ADO.NET没有实现IDataSourceQ?NET也没有提供ADO.NET DataSet对象向ADO Recordset对象的直接{换,如果你有一个 DataSet对象Q你要么转换成XML文gQ要么生成特D格式的字符串才可以使用。下面就是本例子的结果:

[子注明Q如果出错,可能是文件夹权限的问题,我的是Q要虚拟目录的everyone的全部权限加上!]

下面是实现这U功能的VB.NET版本的ASP.NET例子与代码:

OWC.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="OWC.aspx.vb" Inherits="aspxWeb.OWC"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="javascript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5";>
  </HEAD>
  <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
      <asp:placeholder id="ChartHolder" runat="server"></asp:placeholder>
    </form>
  </body>
</HTML>


OWC.aspx.vbQ?/p>

Imports System
Imports OWC
Imports System.Web.UI

Public Class OWC
  Inherits System.Web.UI.Page
  Protected WithEvents ChartHolder As System.Web.UI.WebControls.PlaceHolder

#Region " Web H体设计器生成的代码 "

  '该调用是 Web H体设计器所必需的?br />  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
    'CODEGEN: 此方法调用是 Web H体设计器所必需?br />    '不要使用代码~辑器修改它?br />    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '在此处放|初始化늚用户代码
    '创徏ChartSpace对象来放|图?br />    Dim objCSpace As ChartSpace = New ChartSpaceClass()
    '在ChartSpace对象中添加图表,AddҎq回chart对象
    Dim objChart As WCChart = objCSpace.Charts.Add(0)
    '指定图表的类型。类型由OWC.ChartChartTypeEnum枚D值得?br />    objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered

    '指定图表是否需要图?br />    objChart.HasLegend = True

    'l定标题
    objChart.HasTitle = True
    objChart.Title.Caption = "1-6说数据分布图"

    'l定x,y轴的囄说明
    objChart.Axes(0).HasTitle = True
    objChart.Axes(0).Title.Caption = "Y 轾b? 数量"
    objChart.Axes(1).HasTitle = True
    objChart.Axes(1).Title.Caption = "X _ 月䆾"

    '计算数据
    '*categories 和 values 可以用tab分割的字W串来表C?
    Dim strSeriesName As String = "图例 1"
    Dim strCategory As String = "1" + ControlChars.Tab + "2" + ControlChars.Tab _
 + "3" + ControlChars.Tab + "4" + ControlChars.Tab + "5" + ControlChars.Tab _
 + "6" + ControlChars.Tab
    Dim strvalue As String = "9" + ControlChars.Tab + "8" + ControlChars.Tab _
 + "4" + ControlChars.Tab + "10" + ControlChars.Tab + "12" + ControlChars.Tab _
 + "6" + ControlChars.Tab

    'd一个series
    objChart.SeriesCollection.Add(0)

    'l定series的名?br />    objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimSeriesNames,_
  ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName)

    'l定分类
    objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimCategories,_
  ChartSpecialDataSourcesEnum.chDataLiteral, strCategory)

    'l定?br />    objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimvalues,_
  ChartSpecialDataSourcesEnum.chDataLiteral, strvalue)
    '输出成GIF文g.
    Dim strAbsolutePath As String = (Server.MapPath(".")) + "\Images\test.gif"
    objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350)

    '创徏GIF文g的相对\?
    Dim strRelativePath As String = "Images/test.gif"
    '把图片添加到placeholder.
    Dim strImageTag As String = "<IMG SRC='890_files/&quot; + strrelativepath + &quot;'/>"

    ChartHolder.Controls.Add(New LiteralControl(strImageTag))
  End Sub
  
End Class

下面是C#版本的OWC.asp.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Office.Interop; 
namespace Microsoft.Office.Interop.OWC使用指南
{
 /// <summary>
 /// WebForm1 的摘要说明?br /> /// </summary>
 public class WebForm1 : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.PlaceHolder ChartHolder;
  private Microsoft.Office.Interop.OWC.ChartChartTypeEnum GetChartType(int typeIndex)
  {
   int i;
   Microsoft.Office.Interop.OWC.ChartChartTypeEnum myTE;
   i=typeIndex;
   
   switch(i)
   {
    case 0:
     myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
     return myTE;
    case 1:
     myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypePie;
     return myTE;
    case 2:
     myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeSmoothLine;
     return myTE;
    case 3:
     myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeArea;
     return myTE;
    case 4:
     myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeRadarLine;
     return myTE;
    default:
     myTE=Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
     return myTE;
   }
  }

  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放|用户代码以初始化页?br />   //创徏ChartSpace对象来放|图?br />   Microsoft.Office.Interop.OWC.ChartSpace objCSpace = new Microsoft.Office.Interop.OWC.ChartSpaceClass(); 

   //在ChartSpace对象中添加图表,AddҎq回chart对象
   
   Microsoft.Office.Interop.OWC.ChChart   objChart = objCSpace.Charts.Add (0); 

   //指定图表的类型。类型由Microsoft.Office.Interop.OWC.ChartChartTypeEnum枚D值得?br />   //objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeColumnClustered;
   //上面的是L囄Ҏ
   //objChart.Type = Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeSmoothLine;
   //上面的是d^滑曲U的Ҏ


   objChart.Type =Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeRadarLine;
   //上面的是画雷辄的方?br />   //objChart.Type =Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypeArea;
   //上面的是d域线的方?/p>

   //objChart.Type =Microsoft.Office.Interop.OWC.ChartChartTypeEnum.chChartTypePie;
   //上面的是画饼囄ҎQ但是要x一些参敎ͼ比如
   /*//objChart.Axes[0].HasTitle = true;
   //objChart.Axes[0].Title.Caption = "Y Q 数?;
   //objChart.Axes[1].HasTitle = true;
   //objChart.Axes[1].Title.Caption = "X Q 月?;

    * */

   //指定图表是否需要图?br />   objChart.HasLegend = true;

   //l定标题
   objChart.HasTitle = true;
   objChart.Title.Caption= "上半q分布图";

   //l定x,y轴的囄说明
   objChart.Axes[0].HasTitle = true;
   objChart.Axes[0].Title.Caption = "Y Q 数?;
   objChart.Axes[1].HasTitle = true;
   objChart.Axes[1].Title.Caption = "X Q 月?;

   //计算数据
   /*categories 和 values 可以用tab分割的字W串来表C?/
   string strSeriesName = "图例 1";
   string strCategory = "1" + '\t' + "2" + '\t' + "3" + '\t'+"4" + '\t' + "5" + '\t' + "6" + '\t';
   string strvalue = "9" + '\t' + "8" + '\t' + "4" + '\t'+"10" + '\t' + "12" + '\t' + "6" + '\t';

   //d一个series
   objChart.SeriesCollection.Add(0);

   //l定series的名?br />   objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimSeriesNames,
    + (int)Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);

   //l定分类
   objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimCategories,
    + (int)Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);

      

   //l定?br />   objChart.SeriesCollection[0].SetData
    (Microsoft.Office.Interop.OWC.ChartDimensionsEnum.chDimvalues,
    (int)Microsoft.Office.Interop.OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strvalue); 
   //输出成GIF文g.
   string strAbsolutePath = (Server.MapPath(".")) + "\\test.gif";
   objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350);

   //创徏GIF文g的相对\?
   string strRelativePath = "./test.gif";

   //把图片添加到placeholder.
   string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";
   ChartHolder.Controls.Add(new LiteralControl(strImageTag));
  }

  #region Web Form Designer generated code
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGENQ该调用是 ASP.NET Web H体设计器所必需的?br />   //
   InitializeComponent();
   base.OnInit(e);
  }
 
  /// <summary>
  /// 设计器支持所需的方法? 不要使用代码~辑器修?br />  /// 此方法的内容?br />  /// </summary>
  private void InitializeComponent()
  {    
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion

 }
}


如果用ADO.NET的DataSet对象Q可以生成以TAB分割的字W串Q?/p>

strvalue += (nodes.Item(j).ChildNodes.Item(0).InnerText + '\t');
strCategory += (nodes.Item(j).ChildNodes.Item(1).InnerText + '\t');


Microsoft.Office.Interop名称I间指向Office XP PIAQPIA应该事先安装到Web服务器上。编译源代码时要用到Office XP PIA OWC的DLL文g。如果用VS.NET~译Q只要加入一个Microsoft.Office.Interop.Owc.dll文g的引用即可(位于解开Office XP PIA文g的目录)Q如果从命o行编译,必须按照下列方式使用/r:参数Q?/p>

vbc /t:library /out:bin\getchart.dll /r:System.dll /r:System.Web.dll 
   /r:System.Data.dll 
   /r:C:\oxppia\Microsoft.Office.Interop.Owc.dll getchart.aspx.vb
 


上面的代码有许多值得一提的地方。首先,我们假定数据源位于MSSQL数据库OWCDEMOQ该数据库有一个OWCDATA表,OWCDATA表有两个数值列Q分别是X和Y。getchart.aspx的目标就是从数据库获取记录,然后用散点图QXYQ描q这些数据。?/p>

OWC图表的数据点无法直接从ASP.NET的DataSet获取Q因此,我们首先要把数据库的数据装入数组Q然后用数组的数据填写OWC图表的数据点。如果要Ҏ例作改进的话Q最好开发一个ASP.NET服务器控Ӟ它能够从抽象的数据源Q包括DataSet对象、XML文g或数l)获取数据q生成XY散点图。?/p>

DataReader要比DataSet快速、高效,不过Q我们首先要定数据库中的记录数量,Ҏ记录数量来调整数l的大小。ؓ此,我们先用一个SQL Select count(*)查询获取记录数量Q然后定义数l大,最后用W二个SQL SELECT查询获取数据库记录。?/p>

如果我们要让散点囄各个点用折线q接hQ记录必M照X轴排序,q通过一个SQL ORDER BY子句实现。?/p>

OWC的图表徏立在“绘囄间”上。一个绘囄间可以包含一个或多个图表Q每一个图表可以有一个或多个数据pd。在生成OWC图表Ӟ我们首先创徏一个绘囄_一个图表加入到l图I间Q设|图表的cdQ添加数据系列,最后用数组的数据填写数据系列。?/p>

另外Q我们还可以讄Q可选)各种布局参数Q例如颜艌Ӏ坐标标题、图表标题、图例,{等。OWC提供了数百个布局参数Q我们可以随心所Ʋ地调整图表。当Ӟ对于不同的图表类型,l图模式也略有不同,例如Q饼囑֒散点囄参数讄Ҏ是不同的。在OWC 10安装包中有OWC帮助文gQ里面详l说明了OWC图表模型。?/p>

最后,Response.BinaryWrite参数指定了要输出的图形类型(GIFQ,以及囑Ş的宽度、高度(以像素ؓ单位Q。在q里Q我们可以根据需要羃放从OWC图表生成的图形。?/p>

对了Q忘了说代码的位|了Q在FTP里的论坛问题解答里,有一个OWC使用指南的目录,下面有用OWC的全部文件和源码?/p>

]]>
c#.net常用函数列表http://www.tkk7.com/wuxufeng8080/articles/84707.html风h?/dc:creator>风h?/author>Fri, 01 Dec 2006 00:05:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/84707.htmlSystem.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分U?
currentTime=System.DateTime.Now;
1.2 取当前年
int q?currentTime.Year;
1.3 取当前月
int ?currentTime.Month;
1.4 取当前日
int ?currentTime.Day;
1.5 取当前时
int ?currentTime.Hour;
1.6 取当前分
int ?currentTime.Minute;
1.7 取当前秒
int U?currentTime.Second;
1.8 取当前毫U?
int 毫秒=currentTime.Millisecond;
Q变量可用中文)

1.9 取中文日期显C——年月日时分
string strY=currentTime.ToString("f"); //不显C秒

1.10 取中文日期显C_q月
string strYM=currentTime.ToString("y");

1.11 取中文日期显C_月日
string strMD=currentTime.ToString("m");

1.12 取当前年月日Q格式ؓQ?003-9-23
string strYMD=currentTime.ToString("d");

1.13 取当前时分,格式为:14Q?4
string strT=currentTime.ToString("t");

2、Int32.Parse(变量) Int32.Parse("帔R")
字符型{?转ؓ32位数字型

3?变量.ToString()
字符型{?转ؓ字符?
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 K?2,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16q制)
12345.ToString("p"); //生成 1,234,500.00%


4、变?Length 数字?
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量Q?str是求的字串的变量名

5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转ؓ比特?
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比牚w度:
len = bytStr.Length;

6、System.Text.StringBuilder("")
字符串相加,Q?h不是也一PQ?
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和?);

7、变?Substring(参数1,参数2);
截取字串的一部分Q参?为左起始位数Q参?为截取几位?
如:string s1 = str.Substring(0,2);

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远E用户IP地址

9、穿q代理服务器取远E用L实IP地址Q?
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}

10?Session["变量"];
存取Session|
如,赋| Session["username"]="布什";

取| Object objName=Session["username"];
String strName=objName.ToString();
清空Q?Session.RemoveAll();

11、String str=Request.QueryString["变量"];
用超链接传送变量?
如在M中链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx中取|String str=Request.QueryString["fdid"];

12、DOC对象.CreateElement("新徏节点?);
创徏XML文档新节?

13、父节点.AppendChild(子节?Q?
新建的子节点加到XML文档父节点下

14?父节?RemoveChild(节点);
删除节点

15、Response
Response.Write("字串")Q?
Response.Write(变量)Q?
向页面输出?

Response.Redirect("URL地址"Q;
跌{到URL指定的页?

16、char.IsWhiteSpce(字串变量Q位?——逻辑?
查指定位|是否空字符Q?
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //l果为:True, W一个字W是0位,2是第三个字符?

17、char.IsPunctuation(''''字符'''') --逻辑?
查字W是否是标点W号
如:Response.Write(char.IsPunctuation(''''A'''')); //q回QFalse

18?int)''''字符''''
把字W{为数字,查代码点Q注意是单引受?
如:
Response.Write((int)''''?'''); //l果Z字的代码Q?0013

19?char)代码
把数字{为字W,查代码代表的字符?
如:
Response.Write((char)22269); //q回“国”字?

20?Trim()
清除字串前后I格

21 、字串变?Replace("子字?,"替换?)
字串替换
如:
string str="中国";
str=str.Replace("?,"?); //国字换为央?
Response.Write(str); //输出l果为“中央?

再如Q(q个非常实用Q?

string str="q是<script>脚本";
str=str.Replace("<","<font><</font>"); //左括h换ؓ<font> ?< ?</font> Q或换ؓ<Q但估计lXML存诸后,再提Z会还原)
Response.Write(str); //昄为:“这?lt;script>脚本?

如果不替换,<script>不昄Q如果是一D脚本,运行;而替换后Q脚本将不运行?
q段代码的h值在于:你可以让一个文本中的所有HTML标签失效Q全部显C出来,保护你的h交互性的站点?
具体实现Q将你的表单提交按钮脚本加上下面代码Q?
string strSubmit=label1.Text; //label1是你让用h交数据的控gID?
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit?
用此Ҏq可以简单实现UBB代码?

22、Math.Max(i,j)
取i与j中的最大?
?int x=Math.Max(5,10); // x取?10

23、字串对比一般都? if(str1==str2){ } , 但还有别的方?

(1)?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }

(2)?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.

(3)?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.

24、IndexOf() 、LastIndexOf()
查找字串中指定字W或字串首次Q最后一ơ)出现的位|?q回索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q?

25、Insert()
在字串中指定索引位插入指定字W。如Q?
str1.Insert(1,"?);在str1的第二个字符处插入“字”,如果str1="中国"Q插入后为“中字国”;

26、PadLeft()、PadRight()
在字串左Q或叻I加空格或指定char字符Q字串辑ֈ指定长度Q如Q?
<%
string str1="中国?;
str1=str1.PadLeft(10,''''1''''); //无第二参Cؓ加空?
Response.Write(str1); //l果为?111111中国人?Q?字串长ؓ10
%>

27、Remove()
从指定位|开始删除指定数的字W?
字串Ҏ一般都? if(str1==str2){ } , 但还有别的方?

1?
string str1; str2
//语法: str1.EndsWith(str2); __字串str1是否以字串str2l尾,q回布尔??
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"l束?); }

2?
//语法:str1.Equals(str2); __字串str1是否与字串str2相等,q回布尔?用法同上.

3?
//语法 Equals(str1,str2); __字串str1是否与字串str2相等,q回布尔?用法同上.

IndexOf()
查找字串中指定字W或字串首次出现的位|?q首索引|如:
str1.IndexOf("?)Q?//查找“字”在str1中的索引|位置Q?
str1.IndexOf("字串")Q?/查找“字东y的W一个字W在str1中的索引|位置Q?
str1.IndexOf("字串",3,2)Q?/从str1W?个字WvQ查?个字W,查找“字东y的W一个字W在str1中的索引|位置Q ?br />

]]>
NHibernate快速指?ZT)http://www.tkk7.com/wuxufeng8080/articles/58184.html风h?/dc:creator>风h?/author>Fri, 14 Jul 2006 06:31:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/58184.html
NHibernate 从数据库底层来持久化你的.Net 对象到关pd数据库。NHibernate Z处理q些Q远胜于你不得不写SQLM数据库存取对象。你的代码仅仅和对象兌QNHibernat 自动产生SQL语句Qƈ保对象提交到正的表和字段中去?br />


Z么写q个指南



M熟悉Hibernate的h会发现这指南和Glen Smith ?A Hitchhiker's Guide to Hibernate 非常相近。这里的内容正是Z他的指南Q因此所有的感谢都应该给与他?br />
NHibernate的文档ƈ非每处都和Hibernate的文档一致。然而,目的相似应该能使读者通过读Hibernate的文档来很好的理解NHibernate如何工作?br />
q篇文档意在让你可能快的开始用NHibernate。它介l如何持久化一个简单的对象C张表里。想得到更多的复杂的例子Q可以参考NUnit试及附带代码?br />


开发的q程



Nhibernate未来会提供一些工具帮助你自动产生schema文gQ现在还是基于代码)或是通过映射文g产生c(在筹措阶D)或是更新schema(来自于一个新开发者的)。然而,q里我们的例子是假定一切来自于完全手写Q包括设|表?Netcȝ~写。我们将q行以下步骤?br />
1Q新Z个将要持久化.Net对象的表

2Q构Z个需要被持久化的.Netc?br />
3Q构Z个可以让NHibernate知道如何持久化对象属性的映射文g

4Q构Z个让NHibernate知道如何q接数据库的配置文g]

5Q用NHibernate的API



W一步:写构的SQL



q里我们用的是一个非常简单的例子。假设你正在Z的网站开发一个基本的用户理子系l。我们将使用如下的一张User表(假定你已l设|好一个数据库—在的例子里我称它ؓNHibernateQ?br />





use NHibernate
go

CREATE TABLE users (
LogonID nvarchar(20) NOT NULL default '0',
Name nvarchar(40) default NULL,
Password nvarchar(20) default NULL,
EmailAddress nvarchar(40) default NULL,
LastLogon datetime default NULL,
PRIMARY KEY (LogonID)
)
go
我用的是MS Sql Server 2000, 但也可以使用M数据库,只要你有关于它们的基?Net数据提供驱动E序。我们将得到一个含有LogonID,Name, Password, Email 和LastLogon的表. l过以上标准步骤Q我们下一步是写一?Netcd理一个给定的User对象?br />
W二?产生一?Net cL?br />


当内存中有一堆User对象的时候,我们需要某U对象去保存它们。NHibernate通过对象属性的反射来工作,因此我们需要添加我们希望持久化的对象属性。一个可以被NHibernate持久化的cd该看h象下面的样子Q?br />

using System;

namespace NHibernate.Demo.QuickStart
{
public class User
{
private string id;
private string userName;
private string password;
private string emailAddress;
private DateTime lastLogon;


public User()
{
}

public string Id
{
get { return id; }
set { id = value; }
}

public string UserName
{
get { return userName; }
set { userName = value; }
}

public string Password
{
get { return password; }
set { password = value; }
}

public string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}

public DateTime LastLogon
{
get { return lastLogon; }
set { lastLogon = value; }
}

}
}
在上面的例子里,我们的属性和构徏函数 是publicQ但q个对NHibernate不是必要?它可以用public, protected, internal或者甚x用private来持久化数据?br />


W三步:写映文?br />
现在我们有数据表和需要去映射它的.NetcR我们需要一U方式去让NHibernate知道如何从一个映到另一个。这个Q务依赖于映射文g来完成。最易于理的办法是为每一个类写一个映文Ӟ如果你命名它是YourObject.hbm.xml q且把它攑֜和类的同一个目录里QNHiberante会使得事情单v来。下面是一个User.hbm.xml的例子:


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="NHibernate.Examples.QuickStart.User, NHibernate.Examples" table="users">
<id name="Id" column="LogonId" type="String" length="20">
<generator class="assigned" />
</id>
<property name="UserName" column= "Name" type="String" length="40"/>
<property name="Password" type="String" length="20"/>
<property name="EmailAddress" type="String" length="40"/>
<property name="LastLogon" type="DateTime"/>
</class>

</hibernate-mapping>

让我们来看看q个文g中让我们感兴的某些行。第一个有的标签是class。这里我们将映射cd名称(cd和装配g)到我们数据库中的User表,q里和Hibernate有一点点的不同。你不得不告诉NHibernate从何处提取对象。在q个例子里我们从装配件NHibernate.Examples装蝲cNHibernate.Examples.QuickStart.User 。NHibernate 遵@?Net Framework同样的规则来加蝲cd。因此如果你在如何指定类型的斚w有些hQ请参看.Net Framework SDK?br />
让我们先跌id标签Q来讨论property标签。简要看一下,你将发现NHibernate所要做的工作。name属性的值正是我?Net cȝ属性,column属性值将是我们数据库里的字段。type属性是可选的Q如果你不标明,NHibernate利用反进行最佳的推测Q?br />
好了Q让我们回到标签id, 你可以猜到q个标签是映射数据库表的主键,的确如此Qid标签的组成和我们刚才看的property标签是相似的。我们映属性到目标数据库的字段?br />
内嵌的generator 标签告诉NHibernate 如何生成主键Q它恰当的Z生成主键Q不你指定何种cdQ但你必d诉它Q。在我们的例子里Q我们设定ؓassigned,意味着我们对象自q成主键(毕竟User对象常常需要一个UserIDQ。如果你执意要NHiberanteZ生成主键Q你感兴于讑֮uuid.hex和uuid.stringQ从文档中获取更多信息)



提示Q如果你使用Visual Studio.Net ȝ译的话,请将user.hbm.xml的Build Action属性设|ؓEmbedded Resource。映文件将成ؓ装配件的一部分。更详细的细节重点将在后面展C?br />
提示Q如果你仅仅是改变映文Ӟ你不能用build 而应该Rebuild目。Visual Studio.Net 不会重新~译有改变的映射文g?br />


W四步:Z的数据库产生一个配|文?br />
我们至今q没有告诉NHibernate d里连接数据库。最直接的办法是在你的应用程序的配置文g里设|一个NHibernate配置节。这和在Hibernate里用属性文件是{h的。如下配|:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

<nhibernate>
<add
key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"
/>
<add
key="hibernate.dialect"
value="NHibernate.Dialect.MsSql2000Dialect"
/>
<add
key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"
/>
<add
key="hibernate.connection.connection_string"
value="Server=localhost;initial catalog=nhibernate;Integrated Security=SSPI"
/>
</nhibernate>
</configuration>

上面的例子里用了SqlClient 驱动Q在本地q接名称为NHibernate 的数据库Q提供用户名和密码。那里有一堆属性你需要调整来定如何让NHibernate来访问数据库。再ơ说明,你可以在文档里获取更多信息?br />
h意以上的配置里ƈ没有涉及到log4net的配|信息。NHibernate使用log4net来记录内部发生的一切。在一个应用程序品里Q在你特定环境里Q我推荐配置log4netQƈ为NHibernate讄一定的日志U别?br />
W五步:开始展现NHibernate的魔?br />


所有艰苦的工作已经完成。你有以下内容

User.cs ----你需要持久化的C#c?br />
User.hbm.xml ----你的NHibernate映射文g

App.config ---对ADO.NETq接的配|信息(如果你愿意,你可以在代码中实玎ͼ?br />
你的数据库里有一张User表?br />


现在可以在你的代码中恰当z的使用NHibernate。简化的版本如下

创徏一个Configuration对象
让Configuration知道你将存储何种cd的对?
Z选择的数据库创徏一个Session对象
LoadQSave和Query你的对象
通过Session的Flush()Ҏ对象提交给数据库?br />

Z让你更清晎ͼ我们来看一些代码?br />
首先Q创Z个Configuration对象

Configuration对象能够解析所?Net对象和后台数据库中的映射关系?br />



Configuration cfg = new Configuration();
cfg.AddAssembly("NHibernate.Examples");

Configuration对象会搜索装配g里的M以hbm.xml l尾的文件。还有其他方法加载映文Ӟ但这U方式是最单的?br />
下一步,创徏一个Session对象

ISession对象提供一个到后台数据库的q接QITransaction对象提供一个可以被NHibernate理的事务?br />



ISessionFactory factory = cfg.BuildSessionFactory();
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();



接着来Load, Save和Query你的对象

现在你可以用使用传统?NetҎ来操U对象。你想保存一个新对象到数据库吗?试下面的方法:


User newUser = new User();
newUser.Id = "joe_cool";
newUser.UserName = "Joseph Cool";
newUser.Password = "abc123";
newUser.EmailAddress = "joe@cool.com";
newUser.LastLogon = DateTime.Now;

// Tell NHibernate that this object should be saved
session.Save(newUser);

// commit all of the changes to the DB and close the ISession
transaction.Commit();
session.Close();


正如你所看到的,关于NHiberante重要的事情是如此单。lƈ且查询你的数据库Q验证一下User表里的新记录。现在重要的事情是你去操心业务对象q在q行处理的时候告诉NHibernate可以了?br />


让我们来告诉你,当你有一个UserID的时候如何获取对象(举例_登陆你的|站的时候)。仅仅一句话可以打开SessionQ传入key可以了




// open another session to retrieve the just inserted user
session = factory.OpenSession();

User joeCool = (User)session.Load(typeof(User), "joe_cool");



你所获取的User对象q在生存周期内!改变它的属性,q过Flush()持久化到数据库?br />

// set Joe Cool's Last Login property
joeCool.LastLogon = DateTime.Now;

// flush the changes from the Session to the Database
session.Flush();





你所要做的就是通过NHibernate来进行你需要的改变Qƈ调用Session的Flush()Ҏ提交。验证一下数据库Q查查用户ID为”joe_cool”的记录中”LastLogon”的更改?br />


q有更好的,你可以以System.Collections.IList的方式来获取从表中的对象。如?br />

IList userList = session.CreateCriteria(typeof(User)).List();
foreach(User user in userList)
{
System.Diagnostics.Debug.WriteLine(user.Id + " last logged in at " + user.LastLogon);
}

q个查询会q回所有表记录。往往你需要做更多的控Ӟ比如说获取从March 14, 2004 10:00 PM 以后登陆的用P如下Q?br />
IList recentUsers = session.CreateCriteria(typeof(User))
.Add(Expression.Expression.Gt("LastLogon", new DateTime(2004, 03, 14, 20, 0, 0)))
.List();

foreach(User user in recentUsers)
{
System.Diagnostics.Debug.WriteLine(user.Id + " last logged in at " + user.LastLogon);
}


文档里还有一堆健壮的查询方式让你调用Q这里仅仅让你对NHibernate所提供的强有力的工h一定的了解?br />
最后调用Session对象的Close()ҎQ释放NHibernate所使用的ADO.Netq接资源


// tell NHibernate to close this Session
session.Close();




更确切地说?br />


你已l完成创建对象,持久化ƈ通过条g查询或键值查询来q回它。相信你已经从中获得快乐?br />
现在你对NHibernate有了大致的了解,如果你能仔细阅读大量来自Hibernate 2.0.3文档,你将获得帮助QNHibernate文档q在早期阶段Q现在还仅仅是对Hibernate的拷贝)?br />


Enjoy! And Happy NHibernating!

Mike Doerfler



再次说明Q所有的权利来自Glen Smith的A Hitchhiker's Guide to Hibernate

uploads/200510/24_211004_o_nhibernateuml.jpg


]]>
利用System.Net.Mail发送emailhttp://www.tkk7.com/wuxufeng8080/articles/57890.html风h?/dc:creator>风h?/author>Thu, 13 Jul 2006 00:00:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/57890.html刚刚看到一关于在.NET 中发送Email的文章《从asp.net面发送电子邮件》看C用的q是System.Web.Mail命名I间下的cR我们都知道Q在.NET 1.1下大部分都是使用q个命名I间下的cL发送邮件的Q用SmtpMail的Send静态方法可以很单的发送EmailQ但׃q个c调用的是Windows2000版本以上的操作系l的CDOlg来发送邮Ӟ不管是什么错误都会提C是CDO.Message对象无法讉K或其它的CDO.Message异常Q我们无法得到很比较详细的异怿息,l我们的调试带来的很大的不便。特别是当我们需要Smtp验证的话Q还要给MailMessaged三个邮g头定义,相对来说q是比较ȝ的。那么在.NET 2.0下,发送Email的功能已l被设计得非常好了,利用System.Net.MailI间下的cd以让我们很简单地发送各UEmail。但是ؓ了兼容原来的版本Q所以System.Web.MailI间q没有被删除Q这个空间下的类也都被打上Obsolete标记了,使用.NET 2.0 cȝ译的话都会提CQ推荐用System.Web.MailI间的类来代ѝ?

下面我们来看看需要做哪些事才能发送Email的,在这里我也找C园子里一关?NET 2.0发送Email的文章《基?.NET 2.0 System.Net.Mail namespace 的邮件发送组件》,它涵盖了发送和接收邮g。在本篇里,我们只讨论如何发送的Q我感觉它那边好像没有真正用好配|文件。还要自qSmtpClient指定Stmp帐号的一些信息,事实上我们只需要通过web.config(或app.config)配置一下我们将要用的Smtp帐号Q?

<configuration>

    <system.net>

        <mailSettings>

            <smtp from="hjf1223@tom.com">

                <network host="smtp.tom.com" password=" " port="25" userName="hjf1223" defaultCredentials="false"/>

            </smtp>

        </mailSettings>

    </system.net>

</configuration>

.NET 2.0的配|系l就是强大,我们完全不用d考Q何的资料可以非常简单的写出如上的配|了。如上,from属性就是你要从哪个邮发送EmailQhost是smtp服务器地址了,password,port,userName׃用多说了Q至于defaultCredentials需要注意了Q当我们不需要smtp服务器验证发送用hQ就它设ؓfalseQ反之就设ؓtrueQ当前大多数SMTP服务器都需要用户验证的Q所以一般情况下都就设ؓtrueQ让它用我们配|好的用户名和密码去验证是否是合法用戗?

配置文g写好了,接一来就是程序如何调用了Q等我写出如下的发送Email后,你就感到非常奇怪,真的p么简单吗Q是的,是q么单,来看看:

        MailMessage m_message = new MailMessage();

m_message.From = new MailAddress("hjf1223@tom.com");

m_message.To.Add(new MailAddress("hjf1223@gmail.com"));

m_message.Subject = "使用.NET 2.0发送邮?;

m_message.Body = "非常?";

SmtpClient m_smtpClient = new SmtpClient();

m_smtpClient.Send(m_message);

我们甚至没有一句多余的代码Q就是构造一个MailMessage对象Q然后构造一个SmtpClient直接利用它发送邮件了。比起原来的静态方法,没有多一句代码。这里有的朋友可能就要问了?那smtp帐户信息哪里来呢Q其实你可以调试一下,q时候m_smtpClient对象里属性就是我们前面配|文仉|的g。在构重一个SmtpClientӞ会自动去dsystem.net配置节下的|如果用户有配|smtp信息的话Q那么它会被自动被始到当前的SmtpClient对象Q进而利用它d送Email。在.NET 2.0中发送邮件就只要做这么多工作了,而且非常E_?

ȝQ虽然在.NET 2.0下,使用System.Web.Mail发送邮件很单,在错误的时候也可以得到比较详细的异怿息,但是有时候出现的问题也会让你怸着头脑。最l常出现的是Q当你的机器有安装杀毒防火墙Q有可能会发不出邮gQ但是提CZ息却让你无法诊断是哪里出问题了,大意是邮件发送被拒绝。出现这U事冉|׃防火墙拒l了我们?5端口的用,从而造成无法与SMTP服务器正帔R信。解军_法就是关闭它了,怿|上已经有很多的案例了。还有一点要特别注意Q要发送邮件的机器必须是直接外|的Q由于公司是通过代理上网Q所以这个印象特别深?上面的代码还有一炚w要注意,MailMessage对象的From值必d配置文g中From值是一LQ这里好像也可以不用设,大家可以试一下?

好了Q附上代码,希望能对你有所帮助?/p>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>Test</title>    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->  </head>    <body>    welcome to ivo  </body></html>



]]>
asp.net 生成RSS面-QztQ?/title><link>http://www.tkk7.com/wuxufeng8080/articles/57080.html</link><dc:creator>风h?/dc:creator><author>风h?/author><pubDate>Fri, 07 Jul 2006 02:02:00 GMT</pubDate><guid>http://www.tkk7.com/wuxufeng8080/articles/57080.html</guid><description><![CDATA[ <h2 class="diaryTitle"> </h2> <p>                                       </p> <p> </p> <p>本文主要提供代码,创徏自己的RSS,供别?..</p> <p> </p> <br /> <p>本文主要提供代码,创徏自己的RSS,供别?..</p> <p>--- RSS.aspx</p> <p><%@ Page language="c#" Codebehind="RSS.aspx.cs" AutoEventWireup="false" Inherits="Socent.RSS" %></p> <p>--- RSS.aspx.cs</p> <p>using System;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Web;<br />using System.Web.SessionState;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.HtmlControls;</p> <p>namespace Socent<br />{<br /> /// <summary><br /> ///  取得聚合文章<br /> /// </summary><br /> public class RSS : System.Web.UI.Page<br /> {<br />  Components.GenRSS gr = new Components.GenRSS(); // 实例化对?/p> <p>  string strRSS = "";</p> <p>  private void Page_Load(object sender, System.EventArgs e)<br />  {<br />   Response.ContentType = "application/xml"; // 输出q按xml数据昄<br />   Response.Write (GetRSS());<br />  }</p> <p>  /// <summary><br />  /// 取得聚合文章<br />  /// </summary><br />  public string GetRSS()<br />  {  <br />   DataSet ds = gr.GenerateRSS(); // 调用GenerateRSS()Ҏ,获得数据</p> <p>   strRSS = strRSS + "<rss version=\"2.0\">";<br />   strRSS = strRSS + "<channel>";<br />   strRSS = strRSS + "<title>土h刉?lt;/title>";<br />   strRSS = strRSS + "<link>http://www.socent.com</link>";<br />   strRSS = strRSS + "<description>土h刉?lt;/description>";<br />   for(int i = 0; i < ds.Tables[0].Rows.Count; i++)<br />   {<br />    strRSS = strRSS + "<item>";<br />    strRSS = strRSS + "<title><![CDATA["+ds.Tables[0].Rows[i]["Title"]+"]]></title>";<br />    strRSS = strRSS + "<link>http://www.socent.com/ArticleShow@"+ds.Tables[0].Rows[i]["ID"]+".html</link> ";<br />    strRSS = strRSS + "<description><![CDATA["+ds.Tables[0].Rows[i]["Description"]+"]]></description>";<br />    strRSS = strRSS + "<copyright>土h刉?lt;/copyright>";<br />    strRSS = strRSS + "<pubDate>"+Convert.ToDateTime(ds.Tables[0].Rows[i]["AddDate"].ToString()).ToString("yyyy-MM-dd HH:mm")+"</pubDate>";<br />    strRSS = strRSS + "<comments>http://www.socent.com/CommentShow@"+ds.Tables[0].Rows[i]["ID"]+".html</comments>";<br />    strRSS = strRSS + "</item>";<br />   }<br />   strRSS = strRSS + "</channel>";<br />   strRSS = strRSS + "</rss>";<br />  <br />   return strRSS;<br />  }</p> <p>  #region Web H体设计器生成的代码<br />  override protected void OnInit(EventArgs e)<br />  {<br />   //<br />   // CODEGEN: 该调用是 ASP.NET Web H体设计器所必需的?br />   //<br />   InitializeComponent();<br />   base.OnInit(e);<br />  }<br /> <br />  /// <summary><br />  /// 设计器支持所需的方?- 不要使用代码~辑器修?br />  /// 此方法的内容?br />  /// </summary><br />  private void InitializeComponent()<br />  {   <br />   this.Load += new System.EventHandler(this.Page_Load);<br />  }<br />  #endregion<br /> }<br />}</p> <img src ="http://www.tkk7.com/wuxufeng8080/aggbug/57080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wuxufeng8080/" target="_blank">风h?/a> 2006-07-07 10:02 <a href="http://www.tkk7.com/wuxufeng8080/articles/57080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TreeView 四技http://www.tkk7.com/wuxufeng8080/articles/57059.html风h?/dc:creator>风h?/author>Fri, 07 Jul 2006 00:03:00 GMThttp://www.tkk7.com/wuxufeng8080/articles/57059.htmlhttp://www.tkk7.com/wuxufeng8080/comments/57059.htmlhttp://www.tkk7.com/wuxufeng8080/articles/57059.html#Feedback0http://www.tkk7.com/wuxufeng8080/comments/commentRss/57059.htmlhttp://www.tkk7.com/wuxufeng8080/services/trackbacks/57059.html阅读全文

]]>
վ֩ģ壺 ˳ɵӰվ| 鶹˳Ƶ| ɫƷƵ| պӰ߹ۿַ| aƬѹۿ| ۺϾþþƷ| ޾ƷҹĻ| MVȫƵվ| þ޾ƷAV| Ůǿ߳վ| һƵۿwww| պשר2020| ĻֻѿӰ | ëƬ߹ۿ| ˳ɵӰվ| avh˶ڵ | պһ| ߿Ƭ˳Ƶ| һƷ| ˻ƶվƵ | ձ߲| ߹ۿվ| ѿһ| ޳a߹ۿ| 츾avһ| ŮŮվѿ| AVѿ| ĻѹۿȫӰ| avպavվ| ޵һĻ| ԸŮƵ߹ۿѾƷ | MM1313޹Ʒ| Ʒmnbavվ| Ƶһ| þù׾Ʒѿ| պƵƵվ| պaƵ| ʵŹ| Ļavѷ| Ļ| ĻƷ|