10 2007 档案
摘要:<?php/******************************************************************************参数说明:$max_file_size:上传文件大小限制,单位BYTE$destination_folder:上传文件路径$watermark:是否附加水印(1为加水印,其他为不加水印);******************************************************************************///上传文件类型列表$uptypes=array('image/jpg&
阅读全文
摘要:经常碰到这样的需求,比如你需要保存一个文件到一个目录里去,这个目录或许是用户指定的目录,那么你就需要确保这个目录是否有效的,这样就需要去测试这个目录是否允许写文件?这个目录是否存在?这个目录是否可写的?或者这个目录是否网络上的目录?要完成这个任务,就得使用函数GetDriveType来完成。GetDriveType函数可以获取目录和盘号的属性。函数GetDriveType声明如下:WINBASEAPIUINTWINAPIGetDriveTypeA( __in_opt LPCSTR lpRootPathName );WINBASEAPIUINTWINAPIGetDriveTypeW( __in_
阅读全文
摘要:在Windows系统里,使用完成端口是高性能的方法之一,比如把完成端口使用到线程池和网络服务器里。现在就通过线程池的方法来介绍怎么样使用完成端口,高性能的服务器以后再仔细地介绍怎么样构造它。其实完成端口是一个队列,所有的线程都在等消息出现,如果队列里有消息,就每个线程去获取一个消息执行它。先用函数CreateIoCompletionPort来创建一个消息队列,然后使用GetQueuedCompletionStatus函数来从队列获取消息,使用函数PostQueuedCompletionStatus来向队列里发送消息。通过这三个函数就实现完成端口的消息循环处理。函数CreateIoComplet
阅读全文
摘要:在开发软件过程里,也经常碰到进程间共享数据的需求。比如A进程创建计算数据,B进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据。函数CreateFileMapping、MapViewOfFile声明如下:WINBASEAPI__
阅读全文
摘要:在页面中使用WebWork的token标签解决表单重复提交问题王保政我们的项目是基于Struts开发的,在设计时没有考虑重复提交的问题,所以用户在点击页面的提交,然后在下一个浏览器页面点后退,或者点提交时没跳转到新页面,在当前页面多次点击提交按钮,这两种情况都会产生重复提交的问题,例如用户基本信息维护的新增页面,点两次保存会向数据库提交两次,这时数据库中会新增两条记录。后来我们引入了Webwork框架(项目的主框架仍然是基于struts的,只是将webwork配置到当前项目中,就可以使用webwork的token标签),通过Webwork的token标签解决了这个问题(当然不是必须引入webw
阅读全文
摘要:在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LOG数据定期删除掉。要实现这个功能就得遍历整个目录,把文件名称和文件创建的时间都超过6个月时间的文件删除掉。因此,就需使用到下面的API函数FindFirstFile和FindNextFile来实现这样的功能,FindFirstFile函数是查找到目录下的第一个文件或目录,FindNextFile函数是查找下一文件或目录。函数FindFirstFile、FindNextFile和FindClose声
阅读全文
摘要:在信息的社会里,共享信息是非常重要的。比如你有一个很好的相片,要拷给朋友去分享。又或者你在写一些比较重要的数据,要进行不定时备份时,也就需要拷贝文件到不同的目录里。这样就需要使用到函数CopyFile来拷贝文件,它能够把一份文件拷贝多一份出来。我在开发一个数据采集的软件里,由于这个软件是可以不同的用户共同使用,用户跟我说有这样的需求,就是不同的用户的数据移动到不同的目录里,这样方便他们管理数据,也方便他们在上千个文件里找到自己有用的文件,而不会与别人的文件混在一起,这样就需要把采集数据完成后把文件移到相应的目录,这样就需要使用函数MoveFile来移动文件。函数CopyFile和MoveFil
阅读全文
摘要:有一天,我正在开发BT软件,它有这样的一个功能,就是先把文件的大小分配好,然后再慢慢地往里面对应的位置写入相应的数据。这样的好处,就是可以先把磁盘空间占用起来,以便后面的下载顺利进行。要实现这个功能,就需要创建一个空的文件,然后把文件指针设置到相应大小的位置,然后再调用函数SetEndOfFile来设置文件的结束位置,这样文件就有相应的大小了。在BT软件的开发里,也发现目录的处理时需要详细地记录目录里的文件大小,这就需要使用GetFileSizeEx函数来获取文件的大小。由于BT里的视频文件比较大,有可能几G的,一定要使用GetFileSizeEx函数来处理,这样就可以获取比较大的文件而不出错
阅读全文
摘要:在PC硬件体系结构里,速度最快的存储器是CPU里面的寄存器,接着到二级缓存,再到系统RAM内存,最后才到硬盘。由于这样的体系结构,就决定了操作系统对文件的操作方式,或者说是最优化的算法。比如操作系统接收到写文件的数据时,就会先把数据保存到RAM里,然后在合适的时间或者合适的数据量时再写到硬盘里。但有时候我们希望数据一定要保存到硬盘里,而不是保存在RAM里,这时就需要使用函数FlushFileBuffers来把RAM里的数据保存到硬盘里。文件的结构是一个有序的队列,有头有尾,当读写文件后,就会移动文件里的文件指针。有时候想移动到特定的位置读取数据。比如读取一个BMP的文件,它有文件头和数据块组成
阅读全文
摘要:读写文件是每个Windows软件开发人员都需要做的工作。可见这项工作是非常重要的,毕竟各种各样的数据都需要保存起来,以便作各种各样的分析,或者通过网络传送给别人。像大家用BT下载的电影,在那个BT软件里,就需要不断从网络里接收到数据,然后再把这些数据保存到文件里合适的位置,就可以生成跟发行者那里一样的文件,这样才可以播放出来。又比如我在玩《征途》的游戏里,刚刚打开游戏时,它就不断从服务器上下载更新的文件下来,然后保存到硬盘。WriteFile函数是用来写数据到文件,ReadFile函数是从文件里读取数据出来。但这两个函数不但可以读取写磁盘的文件,也可以接收和发送网络的数据,还有读写串口、USB
阅读全文
摘要:在软件的需求里,把有用的数据保存起来是非常重要的功能。比如每天的股票行情数据需要保存起来,以便生成K线图。比如游戏客户端的LOG需要保存起,以便客户端出错时可以把LOG发送回来分析它出错的原因。比如银行每天进行交易时,也需要把所有交易的数据保存到文件备份起来,以便进行结算。还有在数据采集领域更是需要保存更多的数据,比如从DV里读取视频和语音数据出来,就会生成12G的巨型文件。比如读DVD光盘里,把光盘做成虚拟光驱也有9G大小。因此,创建文件是非常普通的功能,这个肯定是掌握,并且非常会使用的。当然这个CreateFile函数不但可以创建文件,还可以打串口、并口、网络、USB设备等功能。函数Cre
阅读全文
摘要:在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行,那么就需要获取当前进程的目录位置,这就需要使用函数GetCurrentDirectory获取当前进程所有在的目录。同时也可以使用SetCurrentDirectory函数来改变进程的当前目录。函数GetCurrentDirectory和SetCurrentDirectory声明如下:WINBASEAPIDWORDWINAPIGetCurrentDirectoryA( __in DWORD nBufferLength, __out_ecount_part_opt(nBufferLength, return +
阅读全文
摘要:在信息爆炸的年代里,把各种信息分类已经是一种非常必要的功能,比如把股票行情数据保存到硬盘里,就需要分开几个目录保存。比如你写LOG到硬盘时,也需要分成几个目录来保存,这样让维护人员很好地找到出错的信息,或者有用的信息。像我在开发银行的信用卡系统时,就需要把所有通过网络传送的数据全部生成文本文件保存到当日的目录里,也就是说每天都需要创建一个目录,把所有交易的数据生成LOG保存进去。那么面对这样的需求,你是怎么样去创建目录的呢?这就需要使用到Windows API函数CreateDirectory创建目录,当然目录过多时也需要调用函数RemoveDirectory来删除不需要的目录,然而函数Rem
阅读全文
摘要:<?phprequire_once('../Connections/lr.php');?><?php//设定每一页显示的记录数$pagesize=10;//取得记录总数$rs,计算总页数用mysql_select_db($database_lr,$lr);$rs=mysql_query("selectcount(*)fromadmin");$myrow=mysql_fetch_array($rs);$numrows=$myrow[0];//计算总页数$pages=intval($numrows/$pagesize);if($numrows%
阅读全文
摘要:这个函数很多地方都有的。但是有点小小的错误。现在贴出<?//为了避免重复包含文件而造成错误,加了判断函数是否存在的条件:if(!function_exists(pageft)){//定义函数pageft(),三个参数的含义为://$total:信息总数;//$displaypg:每页显示信息数,这里设置为默认是20;//$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。// 默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页
阅读全文
摘要:操作系统对线程有几种状态的变化:执行,挂起和恢复执行。当线程做完任务或者现在想暂停线程运行,就需要使用SuspendThread来暂停线程的执行,当然恢复线程的执行就是使用ResumeThread函数了。这两个函数使用很简单的,下面就来看看例子是怎么样使用的。函数SuspendThread和ResumeThread声明如下:WINBASEAPIDWORDWINAPISuspendThread( __in HANDLE hThread );WINBASEAPIDWORDWINAPIResumeThread( __in HANDLE hThread );hThread是线程的句柄。调用函数的例子如
阅读全文
摘要:Windows是抢先式执行任务的操作系统,无论进程还是线程都具有优先级的选择执行方式,这样就可以让用户更加方便处理多任务。比如当你一边听着音乐,一边上网时,这时就可以把音乐的任务执行级别高一点,这样不让音乐听起来断断续续。当你编写网络程序时,一个线程从网络接收数据,一个线程写数据到硬盘,这时也可以把网络接收线程的优先级设置高一点,因为可以把接收到的数据写到内存里去,然后缓存起来再写到硬盘里。还有一种任务,当你写的程序需要在空闲时才去执行,这时就需设置线程的优先级。这样就使用到SetThreadPriority和GetThreadPriority函数来设置线程的优先级和获取线程的优先级。函数Se
阅读全文
摘要:在写服务器程序里,很多地方都需要使用到线程池。特别现在多处理器的CPU越来越普及,使用多个线程池是明显提高服务器程序的性能。在以消息为基础的Windows系统里,使用消息来处理是最简单的线程池办法,不但使用起来简单,而且理解起来也很简单的方法。创建多个线程后,就可以根据线程的ID来向不同的线程发送消息,每个线程都处理自己的消息。而发送消息给线程的函数是PostThreadMessage函数。下面来演示怎么样使用这个函数。函数PostThreadMessage声明如下:WINUSERAPIBOOLWINAPIPostThreadMessageA( __in DWORD idThread, __i
阅读全文
摘要:以前我一直用XP机器安装SQL Server2000个人版来调试程序,后来在项目中,客户要求在Windows2003下安装SQL Server2000企业版,安装完成后并打了sp3的补丁,但发现虽然企业管理器中数据库实例正常运行,但客户端主机配置ODBC无论如何也连不上数据库,安装数据库的机器上虽然配通了ODBC,但是配置ODBC数据源时,服务器名,客户端配置窗口的服务器别名及服务器名称都是主机名/数据库实例名的格式,直接使用主机名或IP地址是不行的,安装了sql server的sp4补丁后,发现可以直接使用主机名或IP地址来配置服务器名称,不需要用主机名/数据库实例名的格式。客户端配置OD.
阅读全文
摘要:在开发软件的过程中,多线程的程序往往需要实现相互通讯,比如几个线程添加一个消息到队列里,而另一个线程在睡眠时,就需要唤醒那个线程来处理事情。在这其中,就需要使用到信号量来进行同步。CreateSemaphore是创建信号量,ReleaseSemaphore是增加信号量。函数CreateSemaphore和ReleaseSemaphore声明如下:WINBASEAPI__outHANDLEWINAPICreateSemaphoreA( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, __in LONG lInitialCount, __
阅读全文
摘要:作者:阿捷 尽管在我的网站和文章里都有提到CSS制作菜单的方法,但很多初学者还是不太清楚如何实现,以及实现原理,我想专门写一篇详细教程会对大家比较有帮助。我们先来看一个菜单的例子,最终效果是:首页 产品介绍 服务介绍 技术支持 立刻购买 联系我们 然后我们来详细讲解步骤第一步:建立一个无序列表我们先建立一个无序列表,来建立菜单的结构。代码是:<ul><li><a href="1">首页</a></li><li><a href="2">产品介绍</a></
阅读全文
摘要:通用在线播放代码(支持firefox 与 IE)来源: 互联网作者: 飞云点击: 0 RealMedia <object id="RVOCX" classid="CLSID:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="320" height="172"> <param name="SRC" value="realmedia.rm"> <param name="CONTROLS" v
阅读全文
摘要:今天注册了一个免费空间,大小没限制,流量有限制的。支持ASP,PHP,.NET。注册地址 http://web.thec.cn/sysweb/RegTrans.aspx?CodeProvider=piperzero
阅读全文
摘要:前几天遇到一个奇怪问题,插入了一根IDE转USB的线,结果电脑启动时候一直停留在主板LOGO处,刚开始没有发现,拔了线后正常。
阅读全文