先直接看Demo,请用不要使用IE,最好用Chrome...

这个是《操作系统》的课程设计,第一次把课内的作业放上Blog来讨论,大概也是最后一次了。这篇文章大概就说一下这两周开发这个东东的历程,虽然这个我自称的“系统”还有很多缺陷以及作为文件管理平台必需具有的功能我还没有开发,但是我还是先告一段落,工程量太大,在美国的时间宝贵,我会在这里写下我最初的所有设想和计划,待以后继续吧。

缘由

很久很久以前就开始在设想做一个这样的平台,特别在为学校开发亚运场馆团队OA的时候,也正好有这么一个需求。但是考虑到时间仓促,我当时直接找了一个开源的系统凑合着用。

直到这学期开了《操作系统》课程,碰巧课程设计上面也有这么一个选题。于是,决定开始做了,难得找到一个机会让我觉得值得花时间在上面。

说是一个很好的机会也不尽然,毕竟课程设计的精神是希望我们根据课内知识,模拟操作系统的文件夹和文件的磁盘存储方式,用户和目录组织等等,而我在这次开发中是直接使用.Net封装好的IO类,主要精力放在实现Web方式的呈现。所以……这作业有点跑题的嫌疑。

 

纠结

一开始的蓝图就是Window资源管理那样,基本上全部功能我都设想过一篇,觉得实现起来应该不存在太大的技术问题,但是,当我Coding了一周之后,发现工程量是一个问题。

之前很多时间在思考,很多功能可以有很多实现方式,譬如说,前后台数据交互方式,是一次性把整个多级目录的文件信息下载到前台,还是当用户进入一个目录再下载这个目录的文件信息,其实最好的方式是预读取一级目录,就是打开一个目录,后台异步把下一级目录的信息下载,如果用户要打开,不需要等待太长时间。这类的讨论我在论文部分写了很多,在实际编程的时候很纠结,因为往往最好的方案算法最复杂。

时间宝贵啊……每次纠结最终的结论都是一切从简。

 

功能实现

说了这么多废话,来点实际的吧。下面我写一下目前整个平台的功能实现。

1.整体框架

浏览文件:服务器端收到刷新请求——遍历本地文件目录,生成Json数据返回,并且生成缓存文件——前台保存副本——JS监听URL——解析URL,把本地副本中的相应数据提取出来,加以处理,生成Html并且呈现——绑定双击,右击,单击等事件。

修改数据:事件触发产生新建,移动,删除等操作——直接在本地副本中修改并且刷新——同步到服务器,服务器把相应操作映射到本地文件中——重新生成文件目录Json数据保存到缓存中——返回同步成功的消息到客户端。

 

2.历史记录

在这个文件管理系统中,我用过锚记来标记目录位置,并且让js监听锚记的变换情况。这可以带来一下好处:1.在大部分现代浏览器中,锚记的变化会产生历史记录,配合锚记监听,用户可以使用浏览器的前进后退按钮来实现目录的前进后退浏览。2.另外,这也便于目录位置标记,以为整个系统都是基于Ajax来实现浏览的,锚记可以让用户保存网址即可保存当前位置。ie6等部分浏览器暂不支持该功能,可以通过iframe的hack或者通过js记录历史记录并且在页面上添加前进后退来解决。

 

3.待开发功能

文件夹移动:由于C#没有提供文件夹复制的方法,文件夹的移动功能待开发。

出错处理:目前的功能没有完善出错处理,例如,移动文件的之前检查是否有重名文件,如果有,让用户选择操作;文件名的长度和字符限制;还有文件夹移动的出错处理会更加复杂。

键盘操作:实现简单键盘操作,如剪切,复制,,粘贴,全选等。

拖动图标:仅仅是拖动图标比较容易实现,但是如果需要记录图标位置以及通过拖动图标来实现移动文件,可能比较困难,目前的图标我使用浮动,当窗口Size改变,图标会自动排列,但是如果要实现上述说到的功能,则可能需要绝对定位。

预览图标:图片,PDF等文件会显示其缩略图,这个实现起来不难。

在线预览:类似QQ邮箱附件的在线预览,把常用的格式,提供一个在线预览的窗口。

显示方式:最好可以提供列表显示,而且只需要通过改动CSS文件。