October 2006 - Posts
【原文地址】PHP and the FastCGI Module for IIS 7.0
【原文发表日期】 Tuesday, October 31, 2006 9:43 PM
我过去写过几个博客帖子,都是写 IIS 7.0 是多么地酷的。我的很多帖子着重于 IIS7 给 ASP.NET 和 .NET 开发人员带来的新机遇,譬如集成的管道模型,统一的web.config 配置,集成的管理工具体验等。它真的将给开发人员开辟出巨大的机遇,以及提供给大家一个可以无限定制的web服务器。
除了着重于 .NET 开发人员的特性外,我们也在奋力实现非.NET的应用与web服务器的轻松集成。今天早些时候,主管IIS产品组的Bill Staples在本星期举行的 ZendCon PHP 大会上示范了IIS7 的一个很棒的新 FastCGI 模块:
这个秋天我们与 Zend 密切合作,来改进 IIS 对PHP的支持。通过使用这个新模块,PHP开发人员将能在 Windows 上运行时得到显著提高的性能,扩缩性和可靠性,跟老的PHP CGI模块相比,有时能快到25倍!
他们也将能与即将发行的 IIS7 的那些酷酷的新特性轻松地集成(譬如,利用输出缓存的新特性),以及与 ASP.NET 的良好集成。譬如,你可以让 ASP.NET 给一个网站提供成员和角色管理的特性,与此同时,仍然可以使用PHP编写该站的很多网页。因为在 IIS7 里,一个 ASP.NET 模块可以针对服务器的任何请求来执行,所以表单认证,角色管理以及其他特性不再局限于那些映射到ASP.NET的网址。
想进一步了解 IIS 7 的 FastCGI 模块以及如何将它来和 PHP 一起使用的话,一定要去查看一下Bill 这里的精彩教程。Rick也有一个精彩的博客帖子讨论该模块的工作原理。也一定要订阅 这里 指引的的Mike的博客以及 www.iis.net 的博客feed。
希望本文对你有所帮助,
Scott
AJAXWorld杂志主编 Dion Hinchcliffe 不久前发表了《你需要知道的有关AJAX的七件事情(Seven Things You Need to Know About AJAX)》一文。大意如下,
1。浏览器并不适合AJAX。第一个认真的AJAX项目才开始一周,你会发现Ajax 几乎已把浏览器推向其极限。事实是,没有强有力的第三方开发工具,清晰地设计任何规模的 Javascript 软件都需要训练有素和艰苦努力才成。在多个浏览器里调试Ajax应用麻烦透顶,想要做些认真的后台或多线程更需要你使出浑身解数,特别是你想结合那些用了数目有限的计时器的其他的组件。好消息是,简单的AJAX,(譬如点缀些DHTML),比大规模的AJAX要轻松得多了。但做好准备,一旦你的应用规模加倍,随时扩大开发和测试的努力。
2。你不需要你想象中的那么多 Web 服务。我原以为走Ajax这条路需要开发许多新的Web 服务来提供数据和存储。事实上,我发现许许多多项目满足于HTML scraping或使用老式的HTTP POST。这使得尝试 Ajax 开发容易之极,可以重用任何现有的后端HTTP服务,而不是转向SOAP或REST/WOA等复杂的服务。虽然这大概会导致糟糕的架构级的选择,但这也使逐步转化到Ajax 毫不费力,简直自然之极,虽然因此造成的以后的头痛大概是难以避免的。
3。Ajax比传统Web设计和开发更棘手。HTML用户界面规范的丢失,几乎无限制的隐藏功能的可能性,编程手法创建页面元素,以及Ajax 方式的其他固有的特性把我们所知的Web设计和开发方式都扔出门外去了。 Web 设计师必须深刻理解DOM,Javascript和CSS的能力,对浏览器如何显示图像,如何布局,以及显示各种元素要有深刻理解。开发人员发现测试既困难又枯燥。虽然工具在不断地,全面地改进,但要让整个工业积累出行之有效的最佳实践,模式和实用知识,要花几年时间呢。在此要高度赞扬一下象雅虎的Bill Scott这样的业界人士,赞赏他们通过推动类似雅虎UI设计模式库这样的东西,尝试解决这里提到的许多问题,极大地推进了业界的最高工艺水平。结论是,Ajax开发,起码是目前,与传统的Web开发相比要花更多的时间,同时要求更高的技能。
4。Ajax 工具和组件仍在涌现,现今还没有明显的领先者。虽然Dojo火爆出场,但竞争远未结束。譬如,Dojo框架本身的版本还是0.3。紧随其后的种种工具,框架和组件库还有很多。虽然OpenAjax 旨在使得众多产品相互合作,大多数的开发人员只会掌握这其中的2-3个,然后就一直用这几个产品了。在目前的情形下,过早定死在某个特定的产品,一般来说不是个好主意。创新,竞争,和市场的领先地位此起彼伏,尚无定数。同时,一定要去看一下script.aculo.us,Prototype,Google Web Toolkit,Yahoo! UI Library, JackBe,Zapatec,Bindows, Nexaweb,General Interface,Backbase,ActiveWidgets,以及 微软的Atlas。还有很多别的产品,我鼓动你去看一下Max Kiesler对50个Ajax 框架的汇总简评。
5。优秀的Ajax 程序员很是难找。Zimbra的Scott Dietzen最近感慨找到好的Ajax人才之难。但参考上述第3点,建造复杂的Ajax 应用要求的计算机技能要远比Web设计技能多得多。我发现有经验的程序员不太喜欢Javascript编程和调试。这种情形不会持久,但也要过几年才行。
6。必须积极地对付浏览器模型对Ajax的限制。虽然最后的结果会非常值得 ,但象任何技术, Ajax远非完美,它也有几个弱点。一个是它会违反现有的Web模型,譬如,加书签,后退按钮等等。幸运的是, 象Brad Neuberg这样的有识之士对此类问题已有方案,只要你愿意花力气,理解恢复此类功能的重要性。Ajax 也缺乏桌面软件的的很多强处,譬如能离线运行,访问本地硬盘存储等,但Flash 的本地存储和即将发行的Apollo平台能应付这类问题。
7。Ajax 只是成功RIA策略的一个因素。我以前也写过,如果你想让你的在线应用实现范围很广的功能,那么你必须将类似Flex,OpenLaszlo, 以及WPF/E等这样的RIA平台放在考虑范围之内,特别是在想支持象音像这样丰富的媒体的情形下,而Ajax对此几乎无能为力。Ajax 会日益对这些平台造成威胁,特别是在后端服务器提供对服务器端push,Web 服务,企业环境等支持的情形下。
感谢电子工业出版社与博文视点,《SharePoint Portal Server 2003 深入指南》现在已经在CSDN站点上开放了两个章节的免费在线阅读:《第8章 SharePoint的备份及恢复》与《第9章 Windows SharePoint Services对象模型》。您可以在这里直接阅读。
先看一个现象:
如果你有这样的一个WebService 方法:
[WebMethod]
public void myTest(System.Collections.Specialized.NameValueCollection
col)
{
.....
}
那你在请求这个WebService 方法的时候,会收到如下异常:
To be XML serializable, types which inherit from ICollection must have an
implementation of Add(System.String) at all levels of their inheritance
hierarchy. System.Collections.Specialized.NameValueCollection does not
implement Add(System.String).
详细的错误发生点如下:
[InvalidOperationException: To be XML serializable, types which inherit from
ICollection must have an implementation of Add(System.String) at all levels
of their inheritance hierarchy.
System.Collections.Specialized.NameValueCollection does not implement
Add(System.String).]
System.Xml.Serialization.TypeScope.GetDefaultIndexer(Type type, String
memberInfo) +849
System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type, MemberInfo
memberInfo, Boolean directReference) +857
System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo
source, Boolean directReference, Boolean throwOnError) +135
System.Xml.Serialization.XmlReflectionImporter.ImportMemberMapping(XmlReflec
tionMember xmlReflectionMember, String ns, XmlReflectionMember[]
xmlReflectionMembers, Boolean rpc, Boolean openModel) +78
System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlRefle
ctionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement,
Boolean rpc, Boolean openModel) +280
这是因为对 ICollection 接口的类进行序列化的一些特殊要求:
XmlSerializer 可以以不同方式处理实现 IEnumerable 或 ICollection 的类,条件是
这些类满足某些要求,如下所示。
1、实现 IEnumerable 的类必须实现带单个参数的公共 Add 方法。Add 方法的参数必须与
从 GetEnumerator 方法返回的 IEnumerator.Current 属性所返回的类型一致(多态)
。
2、除实现 IEnumerable 外还实现 ICollection 的类(如 CollectionBase)必须有一个
值为整数的公共 Item 索引属性(在 C# 中为索引器),并且必须有一个整数类型的公
共 Count 属性。传递给 Add 方法的参数必须与从 Item 属性返回的类型相同或与该类
型的某个基的类型相同。
3、对于实现 ICollection 的类,要序列化的值将从索引的 Item 属性检索,而不是通过
调用 GetEnumerator 来检索。另外,除返回另一个集合类(实现 ICollection 的集合
类)的公共字段之外,将不序列化其他公共字段和属性。
ICollection 接口的类要可以被序列化,
该类必须包含 Add 方法和要序列化的 Item 属性(C# 索引器)。
上面的WebService 例子出现异常是因为:
NameValueCollection 并不直接实现 ICollection 接口。相反,NameValueCollection
扩展 NameObjectCollectionBase。这样,就会实现 ICollection 接口,并且在
NameValueCollection 类中不实现重载 Add(system.string) 方法。
在使用
XMLSerializer 时,XmlSerializer 尝试将 NameValueCollection 序列化或反序列化
为一般 ICollection。因此,它查找默认的 Add(System.String)。如果没有
Add(system.String) 方法,就会发生异常。
参考资料:
PRB:使用 XmlSerializer 序列化 NameValueCollection 对象时出
现“System.InvalidOperationException”错误
http://support.microsoft.com/default.aspx/kb/814187/zh-cn?spid=548&sid=304
序列化实现 ICollection 接口的类
http://msdn2.microsoft.com/zh-cn/library/58a18dwa.aspx
http://www.codecomments.com/archive321-2006-2-823224.html
http://www.experts-exchange.com/Programming/Programming_Languages/C_Sharp/Q_
21585935.html
BTW,刚才上MSDN订阅主页看到,Windows Vista和Office 2007将在七天内RTM,可以在MSDN订阅下载。哇,终于来了。
BTW2,万圣节快乐!
1。Brad Abrams 的
Search autocomplete with ASP.NET AJAX Extensions
http://blogs.msdn.com/brada/archive/2006/10/27/search-autocomplete-with-asp-net-ajax-extensions.aspx
使用ASP.NET 2.0 profile store 和ASP.NET AJAX AutoCompleteExtender实现提示查询字符串
2。[来源:Kirk Allen Evans] UpdatePanel开发人员Eilon Lipton写的2篇关于UpdatePanel的帖子
What's up with UpdatePanels and how come nothing works?
http://forums.asp.net/thread/1440058.aspx
UpdatePanel中最大的变动是在局部更新情形下异步提交中的脚本注册。在早期CTP版本中使用的机制只对简单的情形适用,在复杂的情形下,譬如UpdatePanel中带有一个向导(Wizard)控件的情形,无法在客户端从页面上去掉控件,导致内存泄漏。在ASP.NET AJAX Extensions 1.0 beta版本中,引人了显式注册脚本的模型,这样UpdatePanel知道什么时候该执行什么脚本。ScriptManager多了几个静态的脚本注册方法。
你以前这么调用,
Page.ClientScript.RegisterClientScriptBlock(typeof(Foo), "key", "alert('hello'); ", true);
但现在应该这么调用,
ScriptManager.RegisterClientScriptBlock(this, typeof(Foo), "key", "alert('hello');", true);
通过这些方法的第一个控件参数,可以判断出注册脚本的这个控件是否包含在UpdatePanel内,如果是的话,在异步更新中,可以决定那个UpdatePanel是否就是当前这个正在更新的UpdatePanel。同时这个控件需要实现dispose逻辑,这样,当UpdatePanel在更新时,清除其内容时,可以调用这些脚本“拆除”所用资源。
可能造成的最大问题是,现有的控件,如果它们注册脚本的话,在UpdatePanel内就不工作了,ATLAS产品组知道这个问题,但为长远计,认为这个改动是必须的。
UpdatePanel内会注册脚本的最常用的控件大概是验证控件,所以这些控件都被更新了,即是Microsoft.Web.UI.Compatibility 命名空间下的那些控件,而且在web.config通过tagMapping的机制把原来的验证控件映射到这些新的控件了。在将来,其他注册脚本的控件也会被更新。
Buying Into Microsoft ASP.NET AJAX without Necessarily Paying For It
http://forums.asp.net/thread/1445844.aspx
通过反射,编写ASP.NET AJAX-Aware的控件,既能在有ASP.NET AJAX 的情形下,也能在没有ASP.NET AJAX 的情形下使用。为什么要编写ASP.NET AJAX-Aware 控件?因为如果一个控件要存活在UpdatePanel中,
- 它需要通过ScriptManager的脚本注册API,而不是使用 Page.ClientScript API。这些新旧API间有一一对应的关系。
- 如果该控件配属事件处理函数的话,那么该控件必须实现dispose功能。
- 该控件注册的脚本需要分成2个部分:1。脚本库代码,只包含函数和类定义,为该控件的所有实例共享;2。该控件的初始化代码,每个实例各不相同
作者提供了一个实例,对如何注册脚本做了详细的介绍。
3。Hannes Preishuber 的
ASP.NET AJAX JSON Date serialization
http://weblogs.asp.net/hpreishuber/archive/2006/10/29/ASP.NET-AJAX-JSON-Date-serialization.aspx
作者发现日期的JSON序列化是 "@977612400000@" 的形式, Sys.Serialization.JavaScriptSerializer.deserialize 使用了正则表达式来反向序列化,不如他的 split/ParseInt/new Date 的效率高。几个月前,Nikhil Kothari 曾提议把日期在JSON中序列化为 @04/15/2006@ ,或 @04/15/2006 12:00:00 PM@ 的形式。
[来源:Brad Abrams ]
在近期举行的 AJAX 体验大会上, jQuery 的作者John Resig 提出了选择一个AJAX框架的标准,主要在文档,社区支持,下载文件大小和受欢迎程度四个方面,而在技术上,则在DOM,Events, Animations,AJAX方面比较。微软Atlas 产品组的主管 Brad Abrams 在他的博客里指出,ASP.NET AJAX框架在文档,社区支持,下载文件大小和受欢迎程度上可以和任何AJAX框架匹敌。John Resig 对此回复说,
I'd classify the Microsoft Ajax Library as having:
- Moderate DOM Traversal, only basic get by ID - no apparent DOM creation methods.
- Acceptable DOM Events.
- Good Ajax Support.
- No Animation Support.(注:其实ASP.NET AJAX有动画支持)
....Even with just the better DOM support the library would already be ahead of Prototype in directly useful functionality....
Brad Abrams的博客里还指出了几个有意思的地方,
- 基本的 XmlHttp 抽象和 JavaScript 语言扩展大家都做得差不多了,有区别也不是很大。真正的竞争将在UI widgets层次上展开,有意思的是,这些UI widgets 是不大容易从一个框架移植到另一个框架的,在接下来的6个月至1年内,框架的与众不同之处将渐渐展现出来。
- 有人指出“Better is Simpler”,应该是指AJAX的易用性,surface area小,而且更加直观。
- 在客户端和服务器端之间的平衡。AJAX 模型把焦点从一个项目UI模型转移到更着重于应用层次服务的集成。ASP.NET 和Atlas的结合是绝配。
- 性能随应用场景而变,没有绝对的答案,应该测量的是用户对性能的感觉(user perception of performance),而不是raw throughput。
- 在用户点击提交按钮前把数据传回服务器,不纯是一个技术性的问题,而是用户的感知模型的问题,因为用户根据以往体验的理解是,在点击提交前,数据是不应该记录的。
【原文地址】Tip/Trick: Handling Errors with the UpdatePanel control using ASP.NET AJAX
【原文发表日期】 Sunday, October 29, 2006 6:56 PM
Luis Abreu是ASP.NET MVP,在 http://msmvps.com 博客站上拥有一个精彩的博客。今天早些时候,他贴了一篇精彩的教程帖子,描述如何使用ASP.NET AJAX Beta1版中的一些新特性,来给你的应用添加更健壮(robust)的出错处理。我强烈推荐你去阅读以及为将来之用而收藏它。
在AJAX世界里处理错误经常会相当棘手,特别当AJAX回调正在进行,应用中客户端和服务器端的编码混合着运行的时候。在最新的版本中,ASP.NET AJAX中的 <asp:updatepanel> 控件现在拥有更健壮的处理错误和报告错误的特性可以为你所用。具体来说,
1) 你现在可以在 <asp:scriptmanager> 控件上处理OnAsyncPostBackError事件,来捕捉和/或修改在服务器端处理AJAX postback回调时发生的错误消息。
2) 你现在可以在 <asp:scriptmanager> 控件上设置AllowCustomErrors属性,启动标准的 ASP.NET 自定义出错支持,在错误反生时,即使这个错误是在AJAX postback 中发生的,可以把用户自动重新定向到一个错误页面。
3) 你现在也可以在页面上选择处理客户端的JavaScript事件来拦截任何从服务器端发回的错误消息,从而来执行自定义的客户端行为。譬如,不是跳出一个消息对话框,而是把错误消息输出到一个格式好看的 <div> 区去。
去这里阅读Luis的精彩教程来了解一下如何利用上述这些新特性吧。
希望本文对你有所帮助,
Scott
开心见谅,在此寻觅一个熟悉SPPS的合作伙伴。
今有一项目涉及到SPPS,寻觅合作伙伴。
要求:
1、熟悉SPPS 2003的架构,能熟练在其基础上进行开发以及整合动作。
2、良好的客户沟通能力,能比较清晰的捕获客户需求,能撰写良好的SA文档
酬劳:请按人天报价
有效期:2006/11/1之前
联系: MSN: uestc95@263.net
PS:Blog不支持IE7,没有了格式化,见谅。
从2006年10月29日开始,我的Realize .NET Potential (中文版)博客进入2.0阶段。
压缩数量,提高质量。
减少随笔,增加文章。
随笔或者文章发布一周后,随时关闭评论功能。
------------------------------------------------------------
一年多前在天道酬勤:之读后感中提到的郑全战博士现在已经成为腾讯首席架构师。预祝全战能取得更多成功!
【原文地址】
CSS Control Adapters Update (Beta3) 【原文发表日期】 Saturday, October 28, 2006 2:06 PM
我以前在博客里写过 Russ 和 Heidi 在开发的这些很棒的CSS控件适配器。这些适配器使用了一个ASP.NET 2.0中称为“control adapters”的内置扩展机制,允许你接入任何 ASP.NET 服务器端控件,覆盖(override),修改(modify),或细调(tweak )控件的显示输出逻辑。
Russ 和 Heidi 开发的这些控件适配器对所有的ASP.NET数据控件(GridView,DataList, DetailsView,FormView等),导航控件(Menu,TreeView),登录控件 (Login,CreateUserWizard, ChangePassword,PasswordRecovery,LoginStatus) 提供了一个基于纯CSS(而不是表格)的显示机制。
你可以从我以前的教程博客帖子这里进一步了解这些控件以及了解如何在你的项目里使用这些控件。
控件适配器Beta3的发布
这个星期早些时候,我们发布了CSS控件适配器的Beta3版本,在其中我们融入了更多的反馈和建议,还添加了许多新特性。下面对几个既新又酷的特性提供了快捷指引:
- 打开 Menu(菜单) 例子,增加你的浏览器的字体大小,在IE里使用查看->文字大小->更大。
- 打开 CreateUserWizard 例子,使用accesskey来导航。如果在Windows下,按 Alt + e 把焦点设置在Email地址文本框里。(在IE里,对密码文本框,你必须同时按下Shift键才能使用对应的accesskey)。
- 试用一下重新设计的 TreeView 例子。展开树的几个节点,选择一个节点造成页面提交。注意到没有,树保持了展开的节点的状态,对被选择的节点做了可见的标记,同时用它的值改动了页面中的内容。
- 玩一下级联复选框(cascading checkboxe)。
- 验证这些页面遵从XHTML 1.1严格标准。
你可以在 http://www.asp.net/cssadapters 这个网站上进一步了解以及下载免费的CSS控件适配器(内含VB和C#2个版本的源码)。
希望本文对你有所帮助,
Scott
尽管BHO被给与了太多的权限,以至于很多反恶意软件对BHO倍加关注,但是很多BHO也是很有用的,例如Google ToolBar和Internet Explorer Developer Toolbar。在Windows XP SP2中,微软在IE中加入了加载项管理器来管理包含BHO在内的浏览器扩展。
微软在1999年1月发布了一篇名为Browser Helper Objects: The Browser the Way You Want It的文章,同时在微软知识库中也提供了一个示例IEHelper,这使得编写BHO的难度大大降低,但是这也使得有缺陷的BHO的数量增加。甚至在最近这篇文章Building Browser Helper Objects with Visual Studio 2005的示例代码中,也有着一些缺陷,但是这篇文章也详尽地阐述了编写BHO需要注意的事项,编写BHO的程序员应该去看一看。
文中的RGS应该从
HKLM {
SOFTWARE {
Microsoft {
Windows {
CurrentVersion {
Explorer {
'Browser Helper Objects' {
ForceRemove '{D2F7E1E3-C9DC-4349-B72C-D5A708D6DD77}' = s
'HelloWorldBHO' {
val 'NoExplorer' = d '1'
}
}
}
}
}
}
}
}
改为
HKLM {
NoRemove SOFTWARE {
NoRemove Microsoft {
NoRemove Windows {
NoRemove CurrentVersion {
NoRemove Explorer {
NoRemove 'Browser Helper Objects' {
ForceRemove '{D2F7E1E3-C9DC-4349-B72C-D5A708D6DD77}' = s
'HelloWorldBHO' {
val 'NoExplorer' = d '1'
}
}
}
}
}
}
}
}
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2,
&LIBID_SHDocVw, 1, 0>
应该改为
public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2,
&LIBID_SHDocVw, 1, 1>
If the page has no frames, the event is fired once after the page is ready, but before any script has run.这句话有误,浏览器在下载到BODY内嵌的script标签的时候就会执行脚本。
those that fire DownloadBegin will also fire a corresponding DocumentComplete 这里DocumentComplete 应该是DownloadComplete。
博客堂的后台对IE7支持似乎不甚完善,编辑的时候格式化功能不见了,用IE6才发得上来
我们使用 FileSystemObject 对象创建文件时候,由于这是个早期版本,你想创建一个utf-8编码的文件,或者读取时候,很容易出现乱码。这时候,你可以使用
ADODB.Stream 对象:
下面的代码就是一个简单的vbScript例子,
把C:\Logs\ 目录下的所有文件和并到一个568.txt 文件:
Function LoadFile(Path)
Dim Stm2
Set Stm2 = CreateObject("ADODB.Stream")
Stm2.Type = 2
Stm2.Mode = 3
Stm2.Open
Stm2.LoadFromFile Path
'Stm2.Charset = "UTF-8"
'Stm2.Charset = "Unicode"
Stm2.Charset = "GB2312"
Stm2.position = 0
LoadFile = Stm2.ReadText
Stm2.Close
Set Stm2 = nothing
End Function
Dim Stm1
Set Stm1 = CreateObject("ADODB.Stream")
Stm1.Type = 2
Stm1.Open
'Stm1.Charset = "UTF-8"
Stm1.Charset = "Unicode"
Stm1.Position = Stm1.Size
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("C:\Logs\")
Set fc = f.Files
For Each f1 in fc
'Wscript.Echo f1.name
Message = LoadFile("C:\Logs\"&f1.name)
'Wscript.Echo Message
Stm1.WriteText Message
Next
set fc = nothing
set f = nothing
set fso = nothing
Stm1.SaveToFile "568.txt",2
Stm1.Close
set Stm1 = nothing
注意:你需要根据你自己对应文件夹下文件的编码,设置ADODB.Stream 对象的 Charset 属性。
我就是在这个代码例子基础上,把我对数据库的每个表、存储过程定义的sql,合并为一个文件,这样,我可以在每次需要发布的时候,执行一边这个脚本,就自动产生需要发布的sql语句集合了。
附:
FileSystemObject 对象的创建文件说明
object.CreateTextFile(filename[, overwrite[, unicode]])
unicode 可选项。Boolean 值,指明文件是否以 Unicode 或 ASCII 文件方式创建。如果文件作为 Unicode 文件创建,则值为 true
,如果作为 ASCII 文件创建,则为 false。如果忽略,则假定为 ASCII 文件。
More Posts
Next page »