我正在创建一个下载应用程序,我希望在它们实际下载之前预先在硬盘上分配文件的空间,因为它们可能相当大,没有人喜欢看到"此驱动器已满,请删除一些文件并再试一次. " 所以,从那个角度来看,我写了这个.
// Quick, and very dirty
System.IO.File.WriteAllBytes(filename, new byte[f.Length]);
Run Code Online (Sandbox Code Playgroud)
它可以工作,至少你下载一个几百MB的文件,甚至可能是GB的文件,如果没有完全消除页面文件并完全杀死你的系统内存,你就会把Windows扔进吵架的狂热中.哎呀.
所以,通过一点启示,我开始使用以下算法.
using (FileStream outFile = System.IO.File.Create(filename))
{
// 4194304 = 4MB; loops from 1 block in so that we leave the loop one
// block short
byte[] buff = new byte[4194304];
for (int i = buff.Length; i < f.Length; i += buff.Length)
{
outFile.Write(buff, 0, buff.Length);
}
outFile.Write(buff, 0, f.Length % buff.Length);
}
Run Code Online (Sandbox Code Playgroud)
这很有效,并且不会遇到最后解决方案的严重内存问题.虽然它仍然很慢,特别是在较旧的硬件上,因为它将数据(可能是GB的)数据输出到磁盘.
问题是:有没有更好的方法来完成同样的事情?有没有办法告诉Windows创建一个x大小的文件,只需在文件系统上分配空间,而不是实际写出一吨数据.我根本不关心初始化文件中的数据(我正在使用的协议 - bittorrent - 为它发送的文件提供哈希值,因此随机未初始化数据的最坏情况是我得到了一个幸运的巧合和部分文件是正确的).
我需要在Windows安装程序项目(标准OOTB VS 2008安装程序项目-vdproj)中执行批处理文件作为卸载过程的一部分.无法直接从安装程序项目中的自定义操作执行bat文件,因此我编写了一个快速的vbs脚本来调用所需的bat文件.
vbs代码:
Set WshShell = WScript.CreateObject( "WScript.Shell" )
command = "uninstall-windows-serivce.bat"
msgbox command
WshShell.Run ("cmd /C " & """" & command & """")
Set WshShell = Nothing
Run Code Online (Sandbox Code Playgroud)
当此脚本独立于卸载运行时,它可以完美地运行.但是,当作为卸载的一部分运行时,它不会执行bat文件(但会显示消息框,因此我知道调用了vbs文件).没有报告错误(至少我可以告诉).为什么此脚本不能作为"卸载自定义操作"的一部分工作
我一直想知道人们如何使用CRC(类责任合作)卡.我在书中读到过它们,在互联网上发现了模糊的信息,但从未真正掌握过它.我认为有人应该制作一个显示CRC卡会话的YouTube视频,因为我的一本书描述它很难用文字表达,它应该"由已经掌握它的人教授".可悲的是,我知道周围没有人使用CRC卡,我想了解更多.
任何链接到视频,显示人们用这种技术进行阐述,将不胜感激.
我意识到之前曾经问过这个问题,但是已经有一个月没有得到好评......我正在看Aptana的Jaxer,我发现这个概念非常令人兴奋.
以下是对不熟悉它的人的快速概述:
用他们的话说,Jaxer是"世界上第一个真正的AJAX服务器".它基于Mozilla引擎,因此脚本使用javascript编写,您可以完全访问服务器端的DOM.
脚本放在带有<script>标签的页面上,您可以指定一个runat属性(ala ASP.NET)来标记要在客户端,服务器上执行的脚本,或者作为"服务器代理",使客户端上的功能可用,但它们通过AJAX在服务器上执行.这也意味着您可以在服务器和客户端上使用您喜欢的客户端库(jQuery,Prototype).
它还可以用来处理用另一种语言生成的文档(例如php,ruby),我想这是不切实际的,除了帮助转换现有的应用程序以使用Jaxer.
编辑:我发布了另一个关于我在使用Jaxer时发现的缺点的问题:使用Jaxer时定义对象
我一直在学习Squeak Smalltalk,并注意到它有一个非常忠实的社区,并且在一些大型的学术和开源项目中使用,但我没有找到任何在商业上以任何重要方式使用它的例子.我很好奇这个环境在世界范围内的商业运作方式.也许接管旧的Smalltalk项目?有人知道吗?