版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、源程序代碼,聯(lián)系153893706操作系統(tǒng)課程設(shè)計(jì)報(bào)告題目: 模擬文件管理系統(tǒng)學(xué) 院 計(jì)算機(jī) 專(zhuān) 業(yè) 網(wǎng)絡(luò)工程 年級(jí)班別 1班 學(xué) 號(hào) 學(xué)生姓名 指導(dǎo)教師_ _ 成 績(jī) 2007 年 1 月 一、課程設(shè)計(jì)題目:編寫(xiě)并調(diào)試一個(gè)樹(shù)型目錄結(jié)構(gòu)的文件系統(tǒng),模擬文件管理工作流程。要求:(1)設(shè)計(jì)多用戶(hù)文件系統(tǒng),采用多級(jí)文件目錄。(2)至少要有十個(gè)以上的實(shí)用命令,應(yīng)設(shè)置文件保護(hù)措施。(3)設(shè)計(jì)一個(gè)較實(shí)用的用戶(hù)界面,方便用戶(hù)使用,界面要為用戶(hù)提供足夠的選擇信息,不需用戶(hù)打入打入冗長(zhǎng)的命令。二、設(shè)計(jì)思想說(shuō)明:使用可視化環(huán)境編程,程序界面模仿windows系統(tǒng)的資源管理器程序左邊為目錄樹(shù)形結(jié)構(gòu),顯示多級(jí)文件目錄
2、,右邊為目錄內(nèi)容顯示。使用鼠標(biāo),鍵盤(pán),快捷鍵及拖動(dòng)作各種文件的操作。文件操作功能有:用戶(hù)登錄,新建文件夾,新建文件,文件重命名,剪切文件/文件夾,復(fù)制文件/文件夾,粘貼,查看文件內(nèi)容,修改文件內(nèi)容,查看文件屬性,修改文件權(quán)限等。為了便于操作,系統(tǒng)內(nèi)的所有文件文件類(lèi)型默認(rèn)為文本文件,用戶(hù)可以直接編輯其文字內(nèi)容。三、系統(tǒng)結(jié)構(gòu)的說(shuō)明1.開(kāi)發(fā)環(huán)境:2.運(yùn)行環(huán)境: Windows 98/NT4.0 以上3.使用控件:Tmenu 菜單欄控件TImageList 圖表集控件 TTreeView 樹(shù)形結(jié)構(gòu)顯示控件 TListView 對(duì)象顯示控件 TPopUpMenu 反健菜單控件 TSplitter 工具欄
3、按鈕分割控件 TStatusBar 狀態(tài)欄控件 TToolButton 工具欄按鈕控件 TToolBar 工具欄菜單控件4.窗體結(jié)構(gòu): 如下列圖,窗體分為三個(gè),分別是Form1,F(xiàn)orm2,F(xiàn)orm3。其中Form1位程序主界面窗體,為始終顯示狀態(tài);Form2為文件內(nèi)容顯示及修改窗體,翻開(kāi)文件時(shí)顯示,其他時(shí)候?yàn)殡[藏狀態(tài);Form3為文件屬性窗體,查看文件屬性時(shí)為顯示狀態(tài),其他時(shí)候?yàn)殡[藏狀態(tài)。Form1,Form2,Form3之間互相包含頭文件,以便于傳遞數(shù)據(jù)。 圖表一 Form1 圖表二 Form2 圖表三 Form3函數(shù)設(shè)置:Form1:int all_size(); /統(tǒng)計(jì)ListView
4、中所有文件的大小int check_file_name(ufd *start,AnsiString filename,int type); /尋找重名節(jié)點(diǎn)ufd *create_file(); /遞歸復(fù)制各節(jié)點(diǎn)void create_up_link(ufd *up,ufd *p); /復(fù)制后填寫(xiě)每個(gè)節(jié)點(diǎn)中的up指針void createfile(AnsiString filename); /新建文件void createfolder(AnsiString filename); /新建目錄ufd *copy_file(ufd *del); /遞歸復(fù)制各節(jié)點(diǎn)void delete_f(ufd *d
5、el); /遞歸刪除節(jié)點(diǎn)void delete_file(ufd *del); /刪除文件/文件夾void destory_ft(); /銷(xiāo)毀 文件-tree 鏈表void destory_fv(); /銷(xiāo)毀 文件-list 鏈表void disable_all(); /禁止控件ft_connect *draw_tree(TTreeNode *tree_p,ufd *p); /遞歸生成樹(shù)狀結(jié)構(gòu)void enable_all(); /激活控件void file_copy_paste(ufd *directory); /復(fù)制后的粘貼void file_cut(ufd *pcut); /剪切文件/文
6、件夾void file_paste(ufd *directory); /剪切后粘貼AnsiString file_path(ufd *p); /計(jì)算文件路徑void folder_view_ini(); /初始化目錄顯示void item_view_ini(); /初始化文件顯示void login(); /登錄void mfd_in(); /初始化用戶(hù)文件鏈表,并賦予用戶(hù)文件數(shù)據(jù)void per_copy(ufd *p); /復(fù)制void refrash(); /刷新void reset(); /重置int subrelative(ufd *a,ufd *b); /判斷a是否附屬于b a在b
7、里?void ufd_in(); /初始化用戶(hù)文件鏈表,并賦予用戶(hù)文件數(shù)據(jù)組件列表Form1: TTreeView *TreeView1; TListView *ListView1; TImageList *ImageList1; TImageList *ImageList2; TMainMenu *MainMenu1; TMenuItem *N5; TMenuItem *N6; TMenuItem *N7; TMenuItem *N8; TStatusBar *StatusBar1; TToolBar *ToolBar1; TToolButton *ToolButton1; TToolBut
8、ton *ToolButton2; TToolButton *ToolButton3; TPopupMenu *PopupMenu1; TMenuItem *N9; TMenuItem *N10; TMenuItem *a1; TMenuItem *N11; TMenuItem *N12; TMenuItem *N13; TMenuItem *N14; TMenuItem *N15; TMenuItem *N17; TMenuItem *N18; TMenuItem *N1; TMenuItem *N2; TMenuItem *N3; TMenuItem *N4; TMenuItem *N20
9、; TMenuItem *N21; TMenuItem *N22; TMenuItem *N23; TMenuItem *N19; TMenuItem *N24; TMenuItem *N25; TMenuItem *N27; TMenuItem *N28; TMenuItem *N29; TMenuItem *N30; TMenuItem *N16; TPopupMenu *PopupMenu2; TMenuItem *N26; TMenuItem *N33; TMenuItem *N31; TMenuItem *N34; TMenuItem *N35; TSplitter *Splitte
10、r1; TSplitter *Splitter2; TToolButton *ToolButton4; TToolButton *ToolButton5;Form2: TMemo *Memo1; TButton *Button1; TButton *Button2;Form3: TButton *Button1; TGroupBox *GroupBox1; TCheckBox *read_mark; TCheckBox *write_mark; TCheckBox *execute_mark; TGroupBox *GroupBox2; TLabel *Label1; TLabel *Labe
11、l2; TLabel *Label3; TEdit *path; TEdit *filename; TEdit *size;響應(yīng)事件列表Form1: void _fastcall FormCreate(TObject *Sender); void _fastcall TreeView1Change(TObject *Sender, TTreeNode *Node); void _fastcall N9Click(TObject *Sender); void _fastcall a1Click(TObject *Sender); void _fastcall N2Click(TObject *S
12、ender); void _fastcall ListView1DblClick(TObject *Sender); void _fastcall ToolButton1Click(TObject *Sender); void _fastcall N30Click(TObject *Sender); void _fastcall N14Click(TObject *Sender); void _fastcall N15Click(TObject *Sender); void _fastcall N21Click(TObject *Sender); void _fastcall N22Click
13、(TObject *Sender); void _fastcall N23Click(TObject *Sender); void _fastcall N17Click(TObject *Sender); void _fastcall N25Click(TObject *Sender); void _fastcall N29Click(TObject *Sender); void _fastcall ListView1SelectItem(TObject *Sender, TListItem *Item, bool Selected); void _fastcall N26Click(TObj
14、ect *Sender); void _fastcall N24Click(TObject *Sender); void _fastcall N19Click(TObject *Sender); void _fastcall N16Click(TObject *Sender); void _fastcall N28Click(TObject *Sender); void _fastcall N33Click(TObject *Sender); void _fastcall N35Click(TObject *Sender); void _fastcall N34Click(TObject *S
15、ender); void _fastcall PopupMenu2Popup(TObject *Sender); void _fastcall N11Click(TObject *Sender); void _fastcall N13Click(TObject *Sender); void _fastcall N27Click(TObject *Sender); void _fastcall N31Click(TObject *Sender); void _fastcall ListView1DragDrop(TObject *Sender, TObject *Source,int X, in
16、t Y); void _fastcall ListView1DragOver(TObject *Sender, TObject *Source,int X, int Y, TDragState State, bool &Accept); void _fastcall ListView1KeyDown(TObject *Sender, WORD &Key,TShiftState Shift); void _fastcall ListView1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); void _fastcall TreeView1
17、DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept); void _fastcall TreeView1DragDrop(TObject *Sender, TObject *Source, int X, int Y); void _fastcall N8Click(TObject *Sender); void _fastcall N12Click(TObject *Sender); void _fastcall N3Click(TObject *Sender); void
18、 _fastcall N4Click(TObject *Sender); void _fastcall ToolButton2Click(TObject *Sender); void _fastcall ToolButton4Click(TObject *Sender); void _fastcall N10Click(TObject *Sender); void _fastcall ToolBar1Click(TObject *Sender);Form2: void _fastcall Button2Click(TObject *Sender); void _fastcall Button1
19、Click(TObject *Sender);Form3: void _fastcall Button1Click(TObject *Sender);四、數(shù)據(jù)結(jié)構(gòu)的說(shuō)明程序的所有數(shù)據(jù)存儲(chǔ)由以下四個(gè)鏈表組成:struct ufd /文件目錄了鏈表 int sign; /標(biāo)志 0-file /1-folder AnsiString filename; /文件/目錄名 char protect3; /文件保護(hù)碼 int length; /文件大小 AnsiString content; /文件內(nèi)容 ufd *up; /父節(jié)點(diǎn)指針 struct ufd *next; /下一節(jié)點(diǎn)指針 struct uf
20、d *folder; /目錄下一層指針*ufd_head,*ufd_p,*current_ufd;struct ft_connect /TreeView 與ufd關(guān)系鏈表 struct ufd *folder; /ufd指針 TTreeNode *tree; /TreeView節(jié)點(diǎn)指針 ft_connect *next; /下一節(jié)點(diǎn)指針*ft_head=NULL,*ft_p,*ft_q;struct fv_connect /ListView 與ufd關(guān)系鏈表 struct ufd *file; /ufd指針 TListItem *item; /ListView節(jié)點(diǎn)指針 fv_connect *
21、next; /下一節(jié)點(diǎn)指針*fv_head=NULL,*fv_p=NULL,*fv_q=NULL;struct mfd /用戶(hù)鏈表 AnsiString username; /用戶(hù)名 struct ufd *ufd; /用戶(hù)目錄指針 struct mfd *link; /下一節(jié)點(diǎn)指針*mfd_head,*mfd_p,*current_user;五、各模塊的算法流程圖1.用戶(hù)登錄模塊流程圖:2.刷新/初始化流程圖:3.TreeView change事件 處理流程圖:6.文件/文件夾 重命名流程圖:7.刪除文件/文件夾流程圖:復(fù)制文件/文件夾流程圖:六、程序源代碼清單:Project1.bpr 工
22、程文件Project1.cpp 工程源文件Unit1.cpp FORM1 源文件Unit1.dfm FORM1 窗體文件Unit2.cpp FORM2 源文件Unit2.dfm FORM2 窗體文件Unit3.cpp FORM3 源文件Unit3.dfm FORM3 窗體文件七、關(guān)鍵源代碼核心函數(shù)源代碼:void _fastcall TForm1:FormCreate(TObject *Sender)/Form1初始化函數(shù) mfd_in(); login();/-void _fastcall TForm1:TreeView1Change(TObject *Sender, TTreeNode *
23、Node) /記錄當(dāng)前數(shù)-文件夾鏈接 ft_p=ft_head; while(ft_p) if(ft_p-tree=TreeView1-Selected) break; ft_p=ft_p-next; if(ft_p) now_ft=ft_p; item_view_ini(); /-void _fastcall TForm1:N9Click(TObject *Sender) /刪除按鈕響應(yīng) TListItem *p; if(p=ListView1-Selected) if(Application-MessageBoxA(確定刪除+p-Caption+嗎?).c_str(),刪除,MB_OKCA
24、NCEL) delete_file(now_fv-file); refrash();/-void refrash() /刷新顯示 Form1-TreeView1-Items-Clear(); Form1-ListView1-Items-Clear(); destory_ft(); drag_copy=0; folder_view_ini();ufd *create_file(ufd *perv,AnsiString filename) /新建單個(gè)文件的數(shù)據(jù)結(jié)構(gòu) ufd *q; q=new(ufd); q-filename=filename; q-sign=0; strcpy(q-protect
25、,111); q-length=12; q-folder=NULL; q-up=NULL; q-content=事例文件內(nèi)容; q-next=NULL; return q;void login() /登錄 AnsiString username=user1; int sign=0; mfd *p,*q; reset(); disable_all(); if(!InputQuery(用戶(hù)登錄,請(qǐng)輸入用戶(hù)名(系統(tǒng)默認(rèn)為user1-user3),username) return; p=mfd_head; while(p) if(p-username=username) break; q=p; p=p
26、-link; if(!p) sign=Application-MessageBoxA(用戶(hù)不存在,是否創(chuàng)立?,登錄提示,MB_YESNO); if(sign=IDYES) p=new(mfd); p-username=username; p-link=NULL; p-ufd=create_file(NULL,原始文件); q-link=p; else return; current_user=p; Form1-StatusBar1-Panels-Items0-Text=當(dāng)前用戶(hù):+username; enable_all(); folder_view_ini();/-void folder_v
27、iew_ini() /初始化目錄顯示 ft_connect *p; TTreeNode *tree_p; Form1-TreeView1-Items-Clear(); tree_p=Form1-TreeView1-Items-AddChild(NULL,current_user-username+ 的根目錄); ft_head=new(ft_connect); ft_head-next=NULL; ft_head-folder=0; ft_head-tree=tree_p; ft_p=ft_head; draw_tree(tree_p,current_user-ufd); p=ft_head;
28、 while(p&now_ft) if(p-folder=now_ft-folder) break; p=p-next; if(p) p-tree-Selected=1; else ft_head-tree-Selected=1;ft_connect *draw_tree(TTreeNode *tree_p,ufd *p) /遞歸生成樹(shù)狀結(jié)構(gòu) TTreeNode *tree_q; while(p) if(p-sign=1) tree_q=Form1-TreeView1-Items-AddChild(tree_p,p-filename); ft_q=new(ft_connect); ft_q-n
29、ext=NULL; ft_q-tree=tree_q; ft_q-folder=p; ft_p-next=ft_q; ft_p=ft_p-next; if(p-folder) draw_tree(tree_q,p-folder); p=p-next; void item_view_ini() /初始化文件顯示 AnsiString str; ufd *p; TListItem *list_p; Form1-ListView1-Items-Clear(); if(!now_ft-tree) /無(wú)當(dāng)前選擇文件夾 p=current_user-ufd; else ft_p=ft_head; if(n
30、ow_ft-folder=0) p=current_user-ufd; else p=now_ft-folder-folder; destory_fv(); /先銷(xiāo)毀原鏈表 fv_p=new(fv_connect); fv_p-next=NULL; fv_head=fv_p; while(p) /顯示并建立關(guān)系鏈表 list_p=Form1-ListView1-Items-Add(); list_p-Caption=p-filename; if(p-sign=0) list_p-ImageIndex=1; fv_q=new(fv_connect); fv_q-item=list_p; fv_q
31、-file=p; fv_q-next=NULL; fv_p-next=fv_q; fv_p=fv_p-next; p=p-next; fv_p=fv_head; fv_head=fv_head-next; free(fv_p); str=(String)Form1-ListView1-Items-Count+ 個(gè)對(duì)象; Form1-StatusBar1-Panels-Items1-Text=str; if(now_ft-folder) str=now_ft-folder-filename; else str=根目錄; Form1-StatusBar1-Panels-Items3-Text=當(dāng)前
32、位置:+str; Form1-StatusBar1-Panels-Items2-Text=總大?。?(String)all_size()+字節(jié);void destory_fv() /銷(xiāo)毀 文件-list 鏈表 fv_p=fv_head; while(fv_p) fv_head=fv_p; fv_p=fv_p-next; free(fv_head); fv_head=NULL;void destory_ft() /銷(xiāo)毀 文件-tree 鏈表 ft_p=ft_head; while(ft_p) ft_head=ft_p; ft_p=ft_p-next; free(ft_head); ft_head
33、=NULL;void _fastcall TForm1:ListView1DblClick(TObject *Sender) /ListView上雙擊圖表事件響應(yīng) TListItem *p; p=ListView1-Selected; if(p) fv_p=fv_head; while(fv_p) /list指針,通過(guò) 文件-list 鏈表 獲取文件鏈表節(jié)點(diǎn)指針 if(fv_p-item=p) break; fv_p=fv_p-next; if(fv_p) ufd_p=fv_p-file; if(ufd_p-sign=1) ft_p=ft_head; while(ft_p) /文件鏈表節(jié)點(diǎn)指針
34、,通過(guò) 文件-tree 鏈表 獲取tree節(jié)點(diǎn)指針 if(ft_p-folder=ufd_p) break; ft_p=ft_p-next; if(ft_p) ft_p-tree-Selected=true; /通過(guò)節(jié)點(diǎn)選中屬性 展開(kāi)tree并激活之前定義的選中后更改右邊工程框顯示 else return; else if(!ufd_p-protect0) Application-MessageBoxA(權(quán)限缺乏,無(wú)法讀取文件,錯(cuò)誤,MB_ICONERROR); return; if(!ufd_p-protect1) Form2-Memo1-ReadOnly=1; Form2-Button1-
35、Enabled=0; else Form2-Button1-Enabled=1; Form2-Memo1-ReadOnly=0; edit=ufd_p; Form2-Show(); Form2-Caption=編輯文件 +ufd_p-filename; Form2-Memo1-Text=ufd_p-content; int all_size() /統(tǒng)計(jì)ListView中所有文件的大小 int size=0; ufd *p; if(now_ft-folder=0) p=current_user-ufd; else p=now_ft-folder-folder; while(p) size+=p-
36、length; p=p-next; return size;void _fastcall TForm1:N29Click(TObject *Sender) /ListView中重命名按鈕 TTreeNode *tree_p; AnsiString filename; ufd *p; if(ListView1-Selected) filename=now_fv-file-filename; if(!InputQuery(重命名,請(qǐng)輸入新名字:,filename) return; if(now_fv-file-up) p=now_fv-file-up-folder; else p=current_
37、user-ufd; if(check_file_name(p,filename,now_fv-file-sign)=1) Application-MessageBoxA(無(wú)法重命名,指定的文件與現(xiàn)有文件重名。請(qǐng)選擇另一文件名。,錯(cuò)誤,MB_ICONERROR); return; now_fv-file-filename=filename; refrash(); /-void _fastcall TForm1:ListView1SelectItem(TObject *Sender, TListItem *Item, bool Selected) /ListView中的selectItem事件 f
38、v_p=fv_head; while(fv_p) if(fv_p-item=Item) break; fv_p=fv_p-next; now_fv=fv_p;/-void _fastcall TForm1:N24Click(TObject *Sender) /新建文件按鈕 AnsiString filename; filename=新文件; if(!Form1-ListView1-Selected) if(!InputQuery(新建文件,請(qǐng)輸入文件名,filename) return; if(now_ft-folder) if(check_file_name(now_ft-folder-fo
39、lder,filename,0) Application-MessageBoxA(無(wú)法新建,指定的文件與現(xiàn)有文件重名。請(qǐng)選擇另一文件名。,錯(cuò)誤,MB_ICONERROR); return; else if(check_file_name(current_user-ufd,filename,0) Application-MessageBoxA(無(wú)法新建,指定的文件與現(xiàn)有文件重名。請(qǐng)選擇另一文件名。,錯(cuò)誤,MB_ICONERROR); return; createfile(filename); refrash();/-void createfile(AnsiString filename) /新建
40、文件 ufd *p,*q; if(p=now_ft-folder) p=now_ft-folder-folder; else p=current_user-ufd; q=create_file(NULL,filename); q-up=now_ft-folder; if(now_ft-folder&!now_ft-folder-folder) now_ft-folder-folder=q; else if(!p) current_user-ufd=q; else while(p-next) p=p-next; p-next=q; int check_file_name(ufd *start,A
41、nsiString filename,int type) /尋找重名節(jié)點(diǎn) ufd *p; p=start; while(p) if(p-sign=type&p-filename=filename) return 1; p=p-next; return 0;void createfolder(AnsiString filename) /新建目錄 ufd *p,*q; if(p=now_ft-folder) p=now_ft-folder-folder; else p=current_user-ufd; q=new(ufd); q-filename=filename; strcpy(q-prote
42、ct,111); q-sign=1; q-length=0; q-up=now_ft-folder; q-next=NULL; q-folder=NULL; if(now_ft-folder&!now_ft-folder-folder) now_ft-folder-folder=q; else if(!p) current_user-ufd=q; else while(p-next) p=p-next; p-next=q; void delete_file(ufd *del) /刪除文件/文件夾 ufd *p=NULL; if(del-sign=1) delete_f(del); if(del
43、-up) if(p=del) p=del-up-folder=del-next;free(del);return; p=del-up-folder; else p=current_user-ufd; if(p=del) current_user-ufd=del-next;free(del);return; while(p) if(p-next=del) p-next=del-next; free(del); return; p=p-next; void delete_f(ufd *del) /遞歸刪除節(jié)點(diǎn) ufd *p,*q; p=del-folder; while(p) if(p-sign=
44、1) delete_f(p); q=p; p=p-next; free(q); void create_up_link(ufd *up,ufd *p) /復(fù)制后填寫(xiě)每個(gè)節(jié)點(diǎn)中的up指針 while(p) p-up=up; if(p-sign=1&p-folder) create_up_link(p,p-folder); p=p-next; void file_cut(ufd *pcut) /剪切文件/文件夾 ufd *p,*q=NULL; cut=NULL; cut_up=NULL; cut_prev=NULL; cut=pcut; if(p=cut-up) p=cut-up-folder;
45、cut_up=cut-up; else p=current_user-ufd; cut_up=NULL; while(p) if(p=pcut) break; q=p; p=p-next; cut_prev=q; cut_sign=1;void file_paste(ufd *directory) /剪切后粘貼 ufd *p,*q,*r=NULL; if (cut-sign!=0&cut-sign!=1) Application-MessageBoxA(剪切失?。簾o(wú)法找到源文件,錯(cuò)誤,MB_ICONERROR); cut=NULL; cut_up=NULL; cut_prev=NULL; re
46、turn; if(!directory) p=current_user-ufd; cut-up=NULL; else p=directory-folder; if(cut-folder&subrelative(cut-folder,directory)=1)|cut=directory) Application-MessageBoxA(剪切失?。耗繕?biāo)文件夾是原文件夾的子文件夾,錯(cuò)誤,MB_ICONERROR); return; cut-up=directory; q=p; while(p) if(p-filename=cut-filename) cut-filename=復(fù)件_+cut-fil
47、ename; p=q; r=p; p=p-next; p=r; if(!p) if(!directory) current_user-ufd=cut; else directory-folder=cut; else p-next=cut; if(!cut_prev) if(!cut_up) current_user-ufd=cut-next; else cut_up-folder=cut-next; else cut_prev-next=cut-next; cut-next=NULL; cut=NULL; cut_up=NULL; cut_prev=NULL; copy=NULL;void _
48、fastcall TForm1:N16Click(TObject *Sender) /剪切按鈕 if(ListView1-Selected) file_cut(now_fv-file); /-void _fastcall TForm1:N28Click(TObject *Sender) /粘貼按鈕 if(cut_sign&!cut) Application-MessageBoxA(無(wú)法移動(dòng)文件,無(wú)法讀取文件或磁盤(pán),錯(cuò)誤,MB_ICONERROR); return; if(cut&(cut_sign|copy_sign) ufd *p=NULL; if(ListView1-Selected) i
49、f(now_fv-file-sign=1) p=now_fv-file; else p=now_ft-folder; if(cut_up=p)|(cut_up=NULL&p=NULL) Application-MessageBoxA(源文件夾相同,錯(cuò)誤,MB_ICONERROR); return; else if(!p) if(cut_sign=1)file_paste(NULL); else file_copy_paste(NULL); else if(cut_sign=1)file_paste(p); else file_copy_paste(p); cut_sign=0; refrash
50、(); /-int subrelative(ufd *b,ufd *a) /判斷a是否附屬于b a在b里? int sign; ufd *p; p=b; while(p) if(p-sign=0) return 0; if(a=p) return 1; sign=subrelative(a,p-folder); if(sign=1) return 1; p=p-next; return 0;void _fastcall TForm1:PopupMenu2Popup(TObject *Sender) /捕獲反鍵點(diǎn)擊對(duì)象 ft_p=ft_head; if(now_ft-tree!=TreeView
51、1-Selected) while(ft_p) if(ft_p-tree=TreeView1-Selected) break; ft_p=ft_p-next; if(ft_p) now_ft=ft_p; /-void per_copy(ufd *p) /復(fù)制 ufd *s; copy_sign=1; copy=new(ufd); copy-sign=p-sign; copy-filename=p-filename; strcpy(copy-protect,p-protect); copy-length=p-length; copy-content=p-content; copy-next=NU
52、LL; copy-up=NULL; if(p-sign=1) copy-folder=copy_file(p-folder); else copy-folder=NULL; if(copy-sign=1©-folder) create_up_link(copy,copy-folder); cut=copy; cut_up=p-up; copy=p;ufd *copy_file(ufd *del) /遞歸復(fù)制各節(jié)點(diǎn) ufd *head=NULL,*p,*q=NULL,*r=NULL,*s=NULL; p=del; while(p) s=NULL; if(p-sign=1) s=copy_
53、file(p-folder); r=new(ufd); if(!head) head=r; else if(!q) q=head; r-sign=p-sign; r-filename=p-filename; strcpy(r-protect,p-protect); r-length=p-length; r-content=p-content; r-folder=s; r-next=NULL; /r-up=p-up; /r-next=p-next; /r-folder=p-folder; if(q) q-next=r;q=q-next; p=p-next; return head;void _f
54、astcall TForm1:N27Click(TObject *Sender) /復(fù)制按鈕 if(now_fv&now_fv-file&ListView1-Selected) per_copy(now_fv-file);/-void file_copy_paste(ufd *directory) /復(fù)制后的粘貼 ufd *p,*q,*r=NULL; if (copy-sign!=0©-sign!=1) Application-MessageBoxA(復(fù)制失敗:無(wú)法找到源文件,錯(cuò)誤,MB_ICONERROR); cut=NULL; cut_up=NULL; cut_prev=NULL;
55、 return; if(!directory) p=current_user-ufd; cut-up=NULL; else p=directory-folder; if(copy-folder&subrelative(copy-folder,directory)=1|copy=directory) Application-MessageBoxA(復(fù)制失?。耗繕?biāo)文件夾是原文件夾的子文件夾,錯(cuò)誤,MB_ICONERROR); return; cut-up=directory; q=p; while(p) if(p-filename=cut-filename) cut-filename=復(fù)件_+cu
56、t-filename; p=q; r=p; p=p-next; p=r; if(!p) if(!directory) current_user-ufd=cut; else directory-folder=cut; else p-next=cut; cut-next=NULL; cut=NULL; cut_up=NULL; cut_prev=NULL;void _fastcall TForm1:ListView1DragDrop(TObject *Sender, TObject *Source, int X, int Y) /拖放后松開(kāi)鼠標(biāo)事件/ Application-MessageBoxA
57、(String)drag_copy).c_str(),錯(cuò)誤,MB_ICONERROR); fv_p=fv_head; while(fv_p) if(fv_p-item=ListView1-DropTarget) break; fv_p=fv_p-next; if(fv_p=now_fv) Application- MessageBoxA(源文件夾相同,錯(cuò)誤,MB_ICONERROR); return; / (TListView1 *)Sender)-Caption; if(drag_copy=1&fv_p&fv_p-file-sign=1) per_copy(now_fv-file); fil
58、e_copy_paste(fv_p-file); cut_sign=0; copy_sign=0; refrash(); if(!now_fv) Application-MessageBoxA(?,錯(cuò)誤,MB_ICONERROR);/ Application-MessageBoxA(now_fv-item-Caption)+(ListView1-DropTarget-Caption).c_str(),MB_ICONERROR); else if(fv_p&fv_p-file-sign=1) file_cut(now_fv-file); file_paste(fv_p-file); cut_sign=0; refrash(); drag_copy=0;/-void _fastcall TForm1:ListView1KeyDown(TObject *Sender, WORD &Key, TShiftS
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度酒水行業(yè)人才培養(yǎng)與交流合同
- 2025年度肉類(lèi)蔬菜冷鏈物流車(chē)輛保險(xiǎn)合同
- 二零二五年度門(mén)窗行業(yè)展會(huì)參展與廣告合作合同
- 2025年度電子商務(wù)平臺(tái)預(yù)約解除與商家權(quán)益保障合同
- 2025年度酒店與文創(chuàng)產(chǎn)業(yè)合作經(jīng)營(yíng)合同
- 二零二五年度租賃合同解約及環(huán)保設(shè)施拆除協(xié)議
- 小學(xué)班主任培訓(xùn)講話(huà)稿
- PLC上位機(jī)自動(dòng)控制系統(tǒng)設(shè)備技術(shù)規(guī)范
- 交通安全在我心主題班會(huì)
- 雙11節(jié)產(chǎn)品活動(dòng)策劃
- 兩家公司成立新公司合作協(xié)議書(shū)
- 小學(xué)四年級(jí)小數(shù)單位換算練習(xí)題100道
- 人教版七年級(jí)下冊(cè)數(shù)學(xué)-第五章-相交線(xiàn)與平行線(xiàn)-單元檢測(cè)題
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
- 項(xiàng)目質(zhì)量管理的溝通與協(xié)調(diào)機(jī)制
- 中醫(yī)常見(jiàn)的護(hù)理診斷及護(hù)理措施
- 設(shè)備技改方案范文
- 員工穩(wěn)定性保障措施及優(yōu)化方案
- 采煤機(jī)機(jī)械說(shuō)明書(shū)樣本
- 慢性腎衰竭病人的護(hù)理教學(xué)
- 《中華民族共同體概論》考試復(fù)習(xí)題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論