背景說明
Windows 系統裡有 cmd.exe, 讓你可以運用指令來操作檔案系統裡的資料匣和檔案資料,
執行起來如下圖:
上圖中顯示 C:\> 代表目前的預設的工作資料匣是 C 磁碟機的最上層資料匣, 你可以在這個視窗裡輸入一些基本的命令例如:
- dir: 可以看到目前預設資料匣裡所有的檔案和資料匣
C:\> dir
磁碟區 C 中的磁碟是 Sys1
磁碟區序號: D073-1E85
C:\ 的目錄
2016/05/17 上午 12:38 341,909 DUMP49ac.tmp
2014/12/01 下午 01:07 <DIR> Intel
2014/12/17 下午 05:37 <DIR> MinGW
2016/03/26 下午 02:38 <DIR> Perl64
2016/04/16 上午 12:00 <DIR> Program Files
2016/05/11 下午 05:08 <DIR> Program Files (x86)
2015/01/19 下午 10:13 <DIR> Users
2016/03/19 上午 12:26 <DIR> Windows
1 個檔案 341,909 位元組
7 個目錄 8,871,424,000 位元組可用
- mkdir: 可以建立一個新的資料匣
C:\> mkdir tmp
C:\> dir
...
C:\tmp 的目錄
...
2016/05/19 上午 12:17 <DIR> tmp
...
- cd: 可以更改目前的預設資料匣
C:\> cd tmp
C:\tmp> dir
磁碟區 C 中的磁碟是 Sys1
磁碟區序號: D073-1E85
C:\tmp 的目錄
2016/05/19 上午 12:17 <DIR> .
2016/05/19 上午 12:17 <DIR> ..
0 個檔案 0 位元組
2 個目錄 8,861,945,856 位元組可用
上面 <DIR> . 目錄代表目前的 C:\tmp 目錄, <DIR> .. 目錄代表上一層的 C:\
目錄
- notepad
a.txt: 執行 notepad(筆記本) 程式編輯一個 a.txt, 隨便輸入 "abcd",
然後存檔
C:\tmp> dir
磁碟區 C 中的磁碟是 Sys1
磁碟區序號: D073-1E85
C:\tmp 的目錄
2016/05/19 上午 12:21 <DIR> .
2016/05/19 上午 12:21 <DIR> ..
2016/05/19 上午 12:21 4 a.txt
看到 a.txt 檔案, 其中有 4 個位元組
- type a.txt 可以顯示文字檔案的內容
C:\tmp> type a.txt
abcd
- 重複上面幾個指令來建立第二層的目錄 c:\tmp\b\, 並且在裡面建立兩個文字檔案 c.txt, d.txt
C:\tmp> mkdir b
C:\tmp> cd b
C:\tmp\b> notepad c.txt
C:\tmp\b> notepad d.txt
C:\tmp\b> dir
磁碟區 C 中的磁碟是 Sys1
磁碟區序號: D073-1E85
C:\tmp\b 的目錄
2016/05/19 上午 12:28 <DIR> .
2016/05/19 上午 12:28 <DIR> ..
2016/05/19 上午 12:27 10 c.txt
2016/05/19 上午 12:28 12 d.txt
2 個檔案 22 位元組
2 個目錄 8,855,109,632 位元組可用
我們由視窗系統的Windows 檔案總管介面裡也可以看到上面建立的目錄和檔案, 下圖顯示 C:\tmp 目錄中有 C:\tmp\b
目錄, 以及 a.txt 檔案
下圖顯示 C:\tmp\b 目錄中有 c.txt 以及 d.txt 檔案
- del c.txt 命令可以刪除 c.txt
檔案
C:\tmp\b> del c.txt
- del d.txt 命令可以刪除 d.txt
檔案, 不過我們先將預設目錄換到上一層再刪除 d.txt, 只是這時候需要把相對於預設目錄的路徑打全, 也就是 del
b\d.txt 才能夠刪除 d.txt, 同時我們用 rmdir 命令把已經空掉的 C:\tmp\b 目錄也刪除
C:\tmp\b> cd ..
C:\tmp> dir
磁碟區 C 中的磁碟是 Sys1
磁碟區序號: D073-1E85
C:\tmp 的目錄
2016/05/19 上午 12:27 <DIR> .
2016/05/19 上午 12:27 <DIR> ..
2016/05/19 上午 12:21 4 a.txt
2016/05/19 上午 12:51 <DIR> b
1 個檔案 4 位元組
3 個目錄 8,896,675,840 位元組可用
C:\tmp> del b\d.txt
C:\tmp> rmdir b
C:\tmp>dir
磁碟區 C 中的磁碟是 Sys1
磁碟區序號: D073-1E85
C:\tmp 的目錄
2016/05/19 上午 12:52 <DIR> .
2016/05/19 上午 12:52 <DIR> ..
2016/05/19 上午 12:21 4 a.txt
1 個檔案 4 位元組
2 個目錄 8,896,634,880 位元組可用
|
作業四要建立上面的資料匣與檔案管理系統並且模擬cmd視窗中基本的操作命令
請注意只需要『模擬』, 不需要真的在作業系統上產生資料匣或是文字檔案
如 範例執行程式, 程式執行時印出下面的選單
============================
目前資料匣/root
請選擇下列操作命令:
1: 回到上一層資料匣
2: 進入下一層資料匣
3: 增加一檔案
4: 列印檔案內容
5: 增加一資料匣
6: 刪除檔案
7: 刪除資料匣及子資料匣
8: 搜尋檔案/資料匣
9: 列印目前資料匣內檔案
a: 列印目前資料匣內檔案(包含子資料匣)
b: 搜尋檔案內字串
c: 檔案或資料匣大小
d: 結束操作
假設我們執行下面的命令 (增加檔案時假設只有一列的資料)
5 ; 增加一資料匣
tmp ; 資料匣名稱
2 ; 進入下一層資料匣
tmp ; 資料匣名稱
3 ; 增加一檔案
a.txt ; 檔案名稱
abcd ; 檔案內容
5 ; 增加一資料匣
b ; 資料匣名稱
2 ; 進入下一層資料匣
b ; 資料匣名稱
3 ; 增加一檔案
c.txt
cdefgh
3 ; 增加一檔案
d.txt
12345678
1 ; 回到上一層資料匣
a : 列印目前資料匣內檔案(包含子資料匣)
============================
/root/tmp
b/
c.txt
d.txt
a.txt
============================
d ; 結束操作
|
這個測試裡請先實作下面簡化的功能,
在作業四中可以由它來衍生出比較好的設計:
請實作下列操作介面:
1: 回到上一層資料匣
2: 進入下一層資料匣
3: 增加一檔案
5: 增加一資料匣
a: 列印目前資料匣內檔案(包含子資料匣)
c: 檔案或資料匣大小
d: 結束操作
此程式需要設計資料匣的類別 Dir 以及檔案的類別 File, 資料匣裡面可以包含多個檔案以及多個子資料匣, 在 main() 函式裡應該要有一個
root 資料匣的物件, 代表檔案系統中最上層的資料匣, 還應該有一個 currentDir 的指標, 指向目前預設的資料匣物件, 上面的選項
1 與選項 2 就是在改變這個 currentDir 的指標, 增加檔案或是增加資料匣都需要在 Dir 物件中增加新的介面函式
參考下圖實作 File 以及 Dir 兩個類別的組合關係
File 類別需要紀錄檔案的名稱、檔案的內容 (假設是一列文字); Dir 類別需要紀錄資料匣的名稱、資料匣內有哪些檔案, 資料匣內有哪些子資料匣
檔案的大小就是檔案內文字的位元組數目, 資料匣的大小是所有子資料匣大小以及所有的檔案的大小的總和
|
將所完成的 project (只需保留 .cpp, .h, .sln 以及 .vcxproj 檔案即可;
刪除掉 .suo, .sdf, .filters, .users, debug\ 資料匣, 以及
ipch\ 資料匣下的所有內容) 以 zip/rar/7zip 程式將整個資料匣壓縮起來,
在「考試作業」繳交區選擇 Labtest3上傳
|