上次的文章發了就等到了一個面試機會,還沒成就來北京了上了一個.net培訓班。這個是這裡老師安排的作業,讓用.netAJAX實現的,想了想覺得那ExtJS+XML寫可能更好這個東西就出來,主要思想是用ExtJS實現前台的UI,然後用AJAX方式實現和伺服器的資訊互動,這裡沒有用到一下ASP.NET下的AJAX實現,就是用的ExtJS自己的AJAX實現。主要是因為效率的考慮,再有就是ExtJS構建的頁面基本上覺得就沒有使用其他AJAX技術的必要了,他的頁面已經沒有重新整理了,要的就是資料而已,資料是通過一般處理常式生產XML實現的。下面就是具體的實現方式,和遇到的一些問題。
ExtJS我也是第一次使用,我希望我的經曆也可以給和我一樣初學ExtJS的朋友一些提示(畢竟當時走了不少彎路)。
ExtJS 和Jquery很像大部分的功能實現都是在初始化的時候實現的。基本沒有是用一個input調用的。個人覺得這個比JQuery做的還有很,比如 JQuery的AJAX還可以寫在input裡面,但是ExtJS你會發現你要是這麼寫了,其他的東西就很難編寫了。Ext還像C#一樣實現了:屬性,方法,甚至實現了事件的機制。大部分ExtJS控制項都有一個handler可以通過配置它來出發實現一些事件。而在定義ExtJS控制項的時候有點像定義 ASP.NET控制項一樣有一些配置的資訊跟在其後,看了ExtJS以後舉得這個東西可以說是完全的JS的物件導向了,強悍強悍。
下面我就介紹一下我這裡web檔案管理系統了
首先是一些檔案壓縮,拷貝等的BLL這裡就不做太多的介紹了,就是一些System.File.IO的一些為對檔案進行操作的類,已實現前台的一些功能。
用於檔案描述的類
檔案描述類
//枚舉類型描述檔案是檔案還是檔案夾
public enum FileType { File, Folder };
//檔案描述類
public class DealFiles
{
public string FileName { get; set; }
public FileType fileType { get; set; }
public DealFiles(string Name, FileType Type)
{
FileName = Name;
fileType = Type;
}
public DealFiles()
{ }
IO檔案操作類
FileManager.cs
using System;
using System.Collections.Generic;
using System.Web;
using System.IO;
/// <summary>
///realize file manager handler (new folder,new file,copy,paste,del,move,rename,cut)
/// </summary>
namespace DragonJ
{
public class FileManager
{
public FileManager()
{
//
//TODO: 在此處添加建構函式邏輯
//
}
public string path { get; set; }
public FileManager(string ParentPath)
{
this.path = ParentPath;
}
/// <summary>
/// 複製檔案和檔案夾(外部存取)
/// </summary>
/// <param name="list"></param>
/// <param name="comedir"></param>
/// <param name="todir"></param>
/// <returns></returns>
public bool CopyFiles(List<DealFiles> list, string comedir, string todir)
{
bool ret = false;
try
{
foreach (DealFiles i in list)
{
if (i.fileType == FileType.Folder)
{
FolderCopy(i.FileName, comedir, todir);
}
else
{
DataCopy(i.FileName, comedir, todir);
}
}
ret = true;
}
catch (Exception e)
{
throw e;
}
return ret;
}
/// <summary>
/// 複製檔案到指定目錄
/// </summary>
/// <param name="filename"></param>
/// <param name="comedir"></param>
/// <param name="todir"></param>
/// <returns></returns>
private bool DataCopy(string filename, string comedir, string todir)
{
bool ret = false;
string new_filename;
if (comedir == todir)
{
new_filename = "複製" + filename;
}
else
{
new_filename = filename;
}
try
{
File.Copy(Path.Combine(comedir, filename), Path.Combine(todir, filename));
ret = true;
}
catch (Exception e)
{
throw e;
}
return ret;
}
/// <summary>
/// 複製檔案夾到指定目錄
/// </summary>
/// <param name="folderName"></param>
/// <param name="comedir"></param>
/// <param name="todir"></param>
/// <returns></returns>
private bool FolderCopy(string folderName, string comedir, string todir)
{
bool ret = false;
string new_folderName;
if (comedir == todir)
{
new_folderName = "複製" + folderName;
}
else
{
new_folderName = folderName;
}
try
{
if (Directory.Exists(Path.Combine(comedir, folderName)))
{
string[] files = Directory.GetFiles(Path.Combine(comedir, folderName));
Directory.CreateDirectory(Path.Combine(todir, folderName));
foreach (string file in files)
{
DataCopy(Path.GetFileName(file), Path.Combine(comedir, folderName), Path.Combine(todir, folderName));
}
//這裡的沒有向zip類中寫的父目錄不斷更改,看看是否好使
string[] dirs = Directory.GetDirectories(Path.Combine(comedir, folderName));
foreach (string dir in dirs)
{
if (!FolderCopy(Path.GetFileName(dir), Path.Combine(comedir, folderName), Path.Combine(todir, folderName)))
{
return false;
}
}
ret = true;
}
}
catch (Exception e)
{
throw e;
}
return ret;
}
/// <summary>
/// 刪除檔案和檔案夾(外部存取)
/// </summary>
/// <param name="list"></param>
/// <param name="dir"></param>
/// <returns></returns>
public bool DelFiles(List<DealFiles> list, string dir)
{
bool ret =