文件管理系統(tǒng)_第1頁
文件管理系統(tǒng)_第2頁
文件管理系統(tǒng)_第3頁
文件管理系統(tǒng)_第4頁
文件管理系統(tǒng)_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.wd目錄一課程設(shè)計(jì)目的及要求1二相關(guān)知識(shí)2三. 題目分析3四概要設(shè)計(jì)4五代碼及流程5六運(yùn)行結(jié)果20七設(shè)計(jì)心得23八參考文獻(xiàn)24一課程設(shè)計(jì)目的及要求深入了解文件管理系統(tǒng),初步掌握文件管理系統(tǒng)的實(shí)現(xiàn)方法。用高級(jí)語言編寫和調(diào)試一個(gè)簡(jiǎn)單的文件系統(tǒng),模擬文件管理的工作過程。從而對(duì)各種文件操作命令的實(shí)質(zhì)內(nèi)容和執(zhí)行過程有比較深入的了解。編寫一程序,模擬一個(gè)簡(jiǎn)單的文件管理系統(tǒng)。樹型構(gòu)造,目錄下可以是目錄,也可以是文件。在此文件管理系統(tǒng),可實(shí)現(xiàn)的操作有:改變目錄:格式:cd 顯示目錄:格式:dir 創(chuàng)立目錄:格式:md 刪除目錄:格式:rd 新建文件:格式:edit 刪除文件:格式:del 退出文件系統(tǒng):ex

2、it二相關(guān)知識(shí)1.文件構(gòu)造體struct FileNode char filenameFILENAME_LEN;/文件名/目錄名int isdir;/目錄文件識(shí)別標(biāo)志int i_nlink;/文件的鏈接數(shù)int adr;/文件的地址struct FileNode *parent, *child;/指向父親的指針和指向左孩子的指針struct FileNode *sibling_prev, *sibling_next;/指向前一個(gè)兄弟的指針和指向/后一個(gè)兄弟的指針.;整個(gè)文件系統(tǒng)采用二叉樹型存儲(chǔ)構(gòu)造,初始化文件樹如下:圖 2-1 初始目錄樹2.所使用函數(shù)及其功能int Main(); /主函數(shù)v

3、oid Init();/初始化文件樹int ParseCommand();/承受輸入的命令并把其分解成操作名和路徑文件名void ExecuteCommand();/執(zhí)行命令,分別執(zhí)行cd,edit,md,del,rd, dir,exit命令int cdComd(); /改變目錄功能處理int editComd();/處理edit命令,即創(chuàng)立文件,只要?jiǎng)?chuàng)立表示文件的節(jié)點(diǎn)即可,內(nèi)容及大小不考慮int mdComd(); /創(chuàng)立目錄int delComd();/處理del命令,即刪除指定文件,不存在是給出錯(cuò)誤信息int dirComd();/處理dir命令,顯示目錄int rdComd(); /刪

4、除目錄int FindFilename(char Para2);/查找文件名struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink);/創(chuàng)立結(jié)點(diǎn)int GetInput(char* buffer,unsigned int buffer_len);/獲取輸入3所使用的變量struct FileNode *cp, *tp, *root;/ *cp, *tp, *root是根目錄節(jié)點(diǎn)char pathINPUT_LEN-COMMAND_LEN;/記錄當(dāng)前走過的路徑char Para1COMMAND_LEN,Para2IN

5、PUT_LEN-COMMAND_LEN;/para1數(shù)組存儲(chǔ)輸入的命令,para2數(shù)組存儲(chǔ)輸入的文件名char filenameFILENAME_LEN,tmp;unsigned int i,j;三 題目分析1文件系統(tǒng)采用二叉樹型存儲(chǔ)構(gòu)造,結(jié)點(diǎn)構(gòu)造如下:struct FileNode char filenameFILENAME_LEN;/文件名/目錄名int isdir;/目錄、文件的識(shí)別標(biāo)志0為文件,1為目錄int i_nlink;/文件的鏈接數(shù)/int adr;/文件的地址struct FileNode *parent, *child;/指向父親的指針和指向左孩子的指針struct Fil

6、eNode *sibling_prev, *sibling_next;/指向前一個(gè)兄弟的指針和指向后一個(gè)兄弟的指針.;2目錄名和文件名支持全路徑名和相對(duì)路徑名,路徑名各分量間用“/隔開3功能具體描述:改變目錄:改變當(dāng)前工作目錄,目錄不存在時(shí)給出出錯(cuò)信息顯示目錄:顯示指定目錄下或當(dāng)前目錄下所有文件和一級(jí)目錄選做:帶/s參數(shù)的dir命令,顯示所有子目錄創(chuàng)立目錄:在指定路徑或當(dāng)前路徑下創(chuàng)立指定目錄。重名時(shí)給出錯(cuò)信息。刪除目錄:刪除指定目錄下所有文件和子目錄。要?jiǎng)h目錄不空時(shí),要給出提示是否要?jiǎng)h除。創(chuàng)立文件:創(chuàng)立指定名字的文件,只要?jiǎng)?chuàng)立表示文件的節(jié)點(diǎn)即可,內(nèi)容及大小不考慮。刪除文件:刪除指定文件,不存在

7、時(shí)給出出錯(cuò)信息。退出文件系統(tǒng):exit4、總體流程:初始化文件目錄;輸出提示符,等待承受命令,分析鍵入的命令;對(duì)合法的命令,執(zhí)行相應(yīng)的處理程序,否那么輸出錯(cuò)誤信息,繼續(xù)等待新命令,直到鍵入EXIT退出為止。四概要設(shè)計(jì)1在內(nèi)存中開辟一個(gè)虛擬磁盤空間作為文件存儲(chǔ)器,在其上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的單用戶文件系統(tǒng)。2文件存儲(chǔ)空間的分配采用顯式鏈接分配。為了實(shí)現(xiàn)創(chuàng)立和刪除文件必須要有一棵初始的文件樹存在,以便在文件樹的根節(jié)點(diǎn)下實(shí)現(xiàn)創(chuàng)立和刪除文件。3. 數(shù)據(jù)構(gòu)造與樹構(gòu)造。數(shù)據(jù)構(gòu)造是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式。數(shù)據(jù)構(gòu)造是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。樹是一種重要的非線性數(shù)據(jù)構(gòu)造,直觀地看,它是數(shù)據(jù)

8、元素在樹中稱為結(jié)點(diǎn)按分支關(guān)系組織起來的構(gòu)造,很象自然界中的樹那樣。樹中每個(gè)分叉點(diǎn)稱為結(jié)點(diǎn),起始結(jié)點(diǎn)稱為樹根,任意兩個(gè)結(jié)點(diǎn)間的連接關(guān)系稱為樹枝,結(jié)點(diǎn)下面不再有分枝稱為樹葉。結(jié)點(diǎn)的前趨結(jié)點(diǎn)稱為該結(jié)點(diǎn)的雙親,結(jié)點(diǎn)的后趨結(jié)點(diǎn)稱為該結(jié)點(diǎn)的孩子,同一結(jié)點(diǎn)的孩子之間互稱兄弟。4文件目錄構(gòu)造采用多級(jí)目錄構(gòu)造。為了簡(jiǎn)單起見,可以使用文件構(gòu)造體,構(gòu)造體內(nèi)容包括:文件名,文件目錄識(shí)別標(biāo)示,文件鏈接數(shù),以及他的左孩子右孩子左兄弟右兄弟指5. 要有分解函數(shù)對(duì)輸入的命令進(jìn)展分解。以識(shí)別那局部是哪局部是命令,哪局部是路徑和文件名。6. 最后要有執(zhí)行函數(shù)。來執(zhí)行輸入的創(chuàng)立文件命令。五代碼及流程開場(chǎng)初始化文件樹獲取鍵盤輸入分解

9、命令執(zhí)行命令顯示目錄退出改變目錄刪除目錄文件創(chuàng)立目錄/文件圖5-1 主函數(shù)流程圖2edit()創(chuàng)立文件函數(shù)流程圖圖5-2 創(chuàng)立文件函數(shù)流程圖開場(chǎng)檢查命令格式獲取文件名不存在該文件刪除的是目錄由用戶共享該文件報(bào)錯(cuò)提示處理刪除的是第一個(gè)孩子情況處理刪除的不是第一個(gè)孩子情況完畢圖5-3 刪除函數(shù)流程圖4ParseCommand()分解命令函數(shù)流程圖圖5-4 分解命令函數(shù)流程圖5改變目錄函數(shù)rdComd()圖 5-5 改變目錄函數(shù)流程圖源代碼:#include #include #include #include #include #define FILENAME_LEN 21#define INPU

10、T_LEN 81#define COMMAND_LEN 11using namespace std;void Init();/初始化文件樹int ParseCommand();/承受輸入的命令并把其分解成操作名和路徑文件名void ExecuteCommand();/執(zhí)行命令int cdComd();/處理cd命令int editComd();/處理edit命令int delComd();/處理del命令int dirComd();/處理dir命令int mdComd();/處理md命令int rdComd();/處理rd命令int FindPath(char *ph);/尋找參數(shù)ph所指向的

11、路徑int FindFilename(char Para2);/從參數(shù)Para2中找到要建設(shè)或刪除的文件、目錄名,并把指針只想其父親結(jié)點(diǎn)struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink);/創(chuàng)立結(jié)點(diǎn)int GetInput(char* buffer,unsigned int buffer_len);/獲取輸入int CheckCommand();/命令檢查int GetDir(int begin,char *path,char *curDir);/獲取路徑struct FileNode *cp, *tp, *

12、root;char pathINPUT_LEN-COMMAND_LEN;/記錄當(dāng)前走過的路徑char Para1COMMAND_LEN,Para2INPUT_LEN-COMMAND_LEN;char curpathINPUT_LEN-COMMAND_LEN,tmppathINPUT_LEN-COMMAND_LEN;char filenameFILENAME_LEN,tmp;unsigned int i,j;/int i,j;struct FileNode /結(jié)點(diǎn)構(gòu)造char filenameFILENAME_LEN;/文件名/目錄名int isdir;/目錄文件識(shí)別標(biāo)志int i_nlink;

13、/文件的鏈接數(shù)struct FileNode *parent, *child;/指向父親的指針和指向左孩子的指針struct FileNode *sibling_prev, *sibling_next;/指向前一個(gè)兄弟的指針和指向后一個(gè)兄弟的指針.;/創(chuàng)立結(jié)點(diǎn)struct FileNode* CreateFileNode(char filename,int isdir,int i_nlink) struct FileNode* node=(struct FileNode*)malloc(sizeof(struct FileNode);/申請(qǐng)結(jié)點(diǎn)空間/相應(yīng)內(nèi)容賦初值 strcpy(node-fi

14、lename,filename);node-isdir=isdir;node-i_nlink=i_nlink;node-parent=NULL;node-child=NULL;node-sibling_prev=NULL;node-sibling_next=NULL; return node;/初始化文件樹void Init() struct FileNode *binNode,*usrNode, *unixNode,*etcNode,*libNode,*userNode,*binNode2,*liuNode,*sunNode,*ftiNode;strcpy(path,/); /根目錄寫入當(dāng)前

15、路徑/創(chuàng)立文件樹的結(jié)點(diǎn)binNode=CreateFileNode(bin,1,0);usrNode=CreateFileNode(usr,1,0);unixNode=CreateFileNode(unix,0,0);etcNode=CreateFileNode(etc,1,0);libNode=CreateFileNode(lib,1,0);userNode=CreateFileNode(user,1,0);binNode2=CreateFileNode(bin,1,0);liuNode=CreateFileNode(liu,1,0);sunNode=CreateFileNode(sun,1

16、,0);ftiNode=CreateFileNode(fti,1,0);cp=tp=root=CreateFileNode(/,1,0);/結(jié)點(diǎn)相應(yīng)內(nèi)容賦值root-parent=NULL;root-child=binNode;root-sibling_prev=root-sibling_next=NULL;binNode-parent=root;binNode-child=NULL;binNode-sibling_prev=NULL;binNode-sibling_next=usrNode;usrNode-parent=NULL;usrNode-child=libNode;usrNode-s

17、ibling_prev=binNode;usrNode-sibling_next=unixNode;unixNode-parent=NULL;unixNode-child=NULL;unixNode-sibling_prev=usrNode;unixNode-sibling_next=etcNode;etcNode-parent=NULL;etcNode-child=NULL;etcNode-sibling_prev=unixNode;etcNode-sibling_next=NULL;libNode-parent=usrNode;libNode-child=liuNode;libNode-s

18、ibling_prev=NULL;libNode-sibling_next=userNode;userNode-parent=NULL;userNode-child=NULL;userNode-sibling_prev=libNode;userNode-sibling_next=binNode2;binNode2-parent=NULL;binNode2-child=NULL;binNode2-sibling_prev=userNode;binNode2-sibling_next=NULL;liuNode-parent=libNode;liuNode-child=NULL;liuNode-si

19、bling_prev=NULL;liuNode-sibling_next=sunNode;sunNode-parent=NULL;sunNode-child=NULL;sunNode-sibling_prev=liuNode;sunNode-sibling_next=ftiNode;ftiNode-parent=NULL;ftiNode-child=NULL;ftiNode-sibling_prev=sunNode;ftiNode-sibling_next=NULL;/獲取文件或目錄名,并把指針指向其父親結(jié)點(diǎn)int FindFilename(char Para2) i=strlen(Para2

20、)-1;j=0;while(Para2i!=/& i=0)filenamej=Para2i;i-; j+;filenamej=0;/獲得逆序的文件或目錄名,存入filename中if(i0) Para2i+1=0;else Para2i=0;j-;for(i=0;i0) /查找路徑int sign=FindPath(Para2);if(sign=0) return 0;return 1;/緩沖區(qū)安全輸入子函數(shù)/如果輸入超過buffer_len,那么截取前buffer_len-1長(zhǎng)度的輸入,/buffer_len處字符用/0代替int GetInput(char* buffer,unsigned

21、 int buffer_len) unsigned int count=0;while(countsibling_prev)cp=cp-sibling_prev;if(cp-parent) cp=cp-parent; /找到父親結(jié)點(diǎn)else return 0; /對(duì)當(dāng)前路徑進(jìn)展相應(yīng)處理i=strlen(path);while(pathi!=/&i0) i-;if(i!=0)pathi=0;elsepathi+1=0;else FindPath(Para2);/查找路徑return 1;/創(chuàng)立目錄函數(shù)int mdComd() struct FileNode * temp,*tp;temp=Cre

22、ateFileNode(,1,0);int sign;if(strlen(Para2)=0) /參數(shù)不能為空printf(n命令格式有錯(cuò)誤.n);return 0;if(strlen(Para2)20) /長(zhǎng)度檢查printf(n目錄名過長(zhǎng)n);return 0;/格式檢查if (!(isalpha(Para20)|Para20=_|Para20=0|Para20=/)printf(目錄名格式有錯(cuò)!n);/* 目錄首字母可以為字母或數(shù)字或/*/return 0;sign=FindFilename(Para2);/獲取目錄名if(sign=0)return 0;if(cp-isdir!=1) /

23、如當(dāng)前指針指向的是文件,那么報(bào)錯(cuò)printf(you cannot edit a directory in under a file!n);return 0;tp=CreateFileNode(filename,1,0); /創(chuàng)立目錄結(jié)點(diǎn),并插入到指定目錄下if(cp-child=NULL)tp-parent=cp; tp-child=NULL; cp-child=tp; tp-sibling_prev=NULL; tp-sibling_next=NULL;else temp=cp;/用temp找到新結(jié)點(diǎn)插入處 temp=temp-child; while(temp-sibling_next

24、) /find the last sibing node temp=temp-sibling_next; if(strcmp(temp-filename,filename)=0&temp-isdir=1) printf(此目錄名已存在n);/重名報(bào)錯(cuò)return 0; /找到了最后一個(gè)結(jié)點(diǎn)temp-sibling_next=tp;tp-parent=NULL;tp-child=NULL;tp-sibling_prev=temp;tp-sibling_next=NULL;return 1;/刪除目錄函數(shù)int rdComd() int sign;struct FileNode *temp;cha

25、r cmd2;if(!CheckCommand() /命令檢查return 0;sign=FindFilename(Para2); /獲取目錄名if(sign=0) return 0;if(cp-child) /用temp指向要?jiǎng)h除的結(jié)點(diǎn)temp=cp-child;while(temp-sibling_next & (strcmp(temp-filename,filename)!=0 | temp-isdir!=1)temp=temp-sibling_next;if(strcmp(temp-filename,filename)!=0) printf(不存在該目錄!n);return 0;els

26、e printf(不存在該目錄!n);return 0;if(temp-isdir!=1) /要?jiǎng)h除的不能是文件printf(ERROR!該命令只能刪除目錄,不可刪除文件!n);return 0;if(temp-child) /如仍有用戶使用該目錄,那么不能刪除printf(n該目錄不為空,您確定要?jiǎng)h除嗎Y/N!n); GetInput(cmd,2);if(strcmp(cmd,n)=0|strcmp(cmd,N)=0)return 0;/刪除工作 if(temp-parent=NULL) /不是第一個(gè)孩子temp-sibling_prev-sibling_next=temp-sibling_

27、next;if(temp-sibling_next)/處理是最后一個(gè)兄弟的情況temp-sibling_next-sibling_prev=temp-sibling_prev; temp-sibling_prev=temp-sibling_next=NULL;/ifelse /第一個(gè)孩子if(temp-sibling_next)/處理是最后一個(gè)兄弟的情況temp-sibling_next-parent=temp-parent; temp-parent-child=temp-sibling_next;free(temp);return 1;/顯示目錄子函數(shù)int dirComd() if(str

28、len(Para2)0)int sign=FindPath(Para2); /查找路徑if(sign=0) return 0; elseprintf(n%s, path);if(cp!=root)printf( %sn,.);if(cp-child=NULL) /指定目錄為空return 0; tp=cp;tp=tp-child; /指定目錄不為空,顯示其所有子目錄及文件名while(tp) if(tp-isdir)printf( %sn,tp-filename);elseprintf( %sn,tp-filename);tp=tp-sibling_next;return 0;/創(chuàng)立文件函數(shù)i

29、nt editComd() struct FileNode * temp=CreateFileNode(,0,0);int sign;struct FileNode *tp;if(strlen(Para2)=0) /路徑不能為空printf(n命令格式有錯(cuò)誤.n);return 0;if(strlen(Para2)20) /長(zhǎng)度檢查printf(n文件名過長(zhǎng)n);return 0;/格式檢查if (!(isalpha(Para20)|Para20=_|Para20=0|Para20=/)printf(文件名格式有錯(cuò)!n);/* 文件首字母可以為字母或數(shù)字或_或/或回車*/return 0;si

30、gn=FindFilename(Para2);/獲取文件名if(sign=0)return 0;if(cp-isdir!=1) /如當(dāng)前指針指向的是文件,那么報(bào)錯(cuò)printf(you cannot edit a file in under a file!n);return 0;/創(chuàng)立文件結(jié)點(diǎn),并插入到指定目錄下tp=CreateFileNode(,1,0);strcpy(tp-filename,filename);tp-isdir=0;tp-i_nlink=0;if(cp-child=NULL)tp-parent=cp; tp-child=NULL; cp-child=tp; tp-sibli

31、ng_prev=NULL; tp-sibling_next=NULL;else temp=cp; temp=temp-child;/用temp找到新結(jié)點(diǎn)插入處 while(temp-sibling_next ) /find the last sibing node temp=temp-sibling_next; if(strcmp(temp-filename,filename)=0&temp-isdir=0) printf(此文件名已存在,請(qǐng)重新輸入n); /重名報(bào)錯(cuò) return 0;/找到了最后一個(gè)結(jié)點(diǎn)temp-sibling_next=tp;tp-parent=NULL;tp-child

32、=NULL;tp-sibling_prev=temp;tp-sibling_next=NULL;return 1;/刪除文件子函數(shù)int delComd() int sign;struct FileNode *temp;if(strlen(Para2)=0) /參數(shù)不能為空printf(n命令格式有錯(cuò)誤.n);return 0;sign=FindFilename(Para2); /獲取文件名if(sign=0) return 0;if(cp-child) /用temp指向要?jiǎng)h除的結(jié)點(diǎn)temp=cp-child;while(temp-sibling_next&(strcmp(temp-filen

33、ame,filename)!=0|temp-isdir!=0)temp=temp-sibling_next;if(strcmp(temp-filename,filename)!=0) printf(不存在該文件!n);return 0;else printf(不存在該文件!n);return 0;if(temp-isdir!=0) /要?jiǎng)h除的不能是目錄printf(ERROR!該命令只能刪除文件,不可刪除目錄!n);return 0;if(temp-i_nlink!=0) /如仍有用戶使用該文件,那么不能刪除printf(還有用戶共享了該文件,不能刪除!n);return 0;/刪除工作 if

34、(temp-parent=NULL) /不是第一個(gè)孩子temp-sibling_prev-sibling_next=temp-sibling_next;if(temp-sibling_next)/處理是最后一個(gè)兄弟的情況temp-sibling_next-sibling_prev=temp-sibling_prev; temp-sibling_prev=temp-sibling_next=NULL;else /第一個(gè)孩子if(temp-sibling_next)/處理是最后一個(gè)兄弟的情況temp-sibling_next-parent=temp-parent; temp-parent-chil

35、d=temp-sibling_next;free(temp);return 1;/獲取當(dāng)前目錄名子函數(shù)int GetDir(int begin,char *path,char *curDir) int i=0;int len=strlen(path);while(!(pathbegin=)|(pathbegin=/)&beginchild;i+; /濾過/strcpy(path,/);else if(cp!=NULL&cp!=root)strcat(path,/);if(cp&cp-child) if(cp-isdir)cp=cp-child;/指針指向當(dāng)前目錄的左孩子else printf(

36、路徑錯(cuò)誤!n);return 0;while(ichild) i+; /略過/if(cp-isdir)cp=cp-child; /繼續(xù)查找下級(jí)目錄else printf(路徑錯(cuò)誤!n);return 0;strcat(path,/); while(phi!=/&ifilename,curpath)!=0|(cp-isdir!=1)&cp-sibling_next!=NULL) cp=cp-sibling_next; if(strcmp(cp-filename,curpath)=0)if(cp-isdir=0) strcpy(path,oldpath);cp=temp;printf(是文件不是目錄.n);return 0;strcat(path,cp-filename);if(strcmp(cp-filename,curpath)!=0|cp=NULL) strcpy(path,oldpath);cp=temp;printf(輸入路徑錯(cuò)誤n);return 0;return 1;/命令檢查函數(shù)int CheckCommand() if(strlen(Para2)=0) printf(命令語法不正確.n);return 0;return 1;/分解命令子函數(shù)int ParseCommand() char InputsINPUT_LEN;int i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論