使用ICSharpCode.SharpZipLib在现有Zip文件中添加文件的方法

ICSharpCode.SharpZipLib是一个操作压缩文件的类库。网上使用这个类库在Zip文件中添加文件的方法主要都是使用ZipOutputStream类在Zip中添加文件,可是使用这种方法有个很大的缺点,就是会把Zip文件原有的内容覆盖掉,只适合新建Zip文件。昨天需要把内存中的内容写到一个Zip文件中的一个文件里,所以研究了一下,发现ZipFile.Add方法可以满足这个需求,这个方法有8个重载,我用的是void Add(IStaticDataSource,string)这个重载。 继续阅读“使用ICSharpCode.SharpZipLib在现有Zip文件中添加文件的方法”

时区设置导致的奇怪问题

公司最近正在做一个项目,这个项目有一个服务端和若干个客户端。服务端主要负责根据客户端提供的参数从数据库查询数据放到DataTable里,然后把DataTable序列化后传给客户端。客户端负责把从服务器传送过来的数据显示出来。

今天做这个项目的时候遇到一个非常奇怪的问题:服务端从数据库里查出来的DateTime类型的数据在服务端是正常的,传到客户端后全部都多了8个小时;而如果由客户端直接查数据库的话,得出的结果是正确的。检查服务端和客户端的时区后发现服务端的时区设置于客户端的不一致,因此,.Net自作主张地把DateTime中保存的时间改了。后来把服务器与客户端的时区设置改成一样就恢复正常了。

Windows下用CGI上传二进制文件损坏的解决办法

最近在用Python写CGI程序,在做文件上传这部分时发现上传的文件与原文件不一样,上传的文件都打不开。把上传的文件跟原文件对比发现,原文件里面 0x0d0a 的地方都变成了 0x0a,所以无法打开。这个问题的原因是Python的标准输入流是以文本的方式打开的,对换行符作了处理,下面的代码可以把标准输入流的打开方式设成二进制,把它加进程序开头问题解决。

msvcrt.setmode(0,os.O_BINARY)