Windows 檔案系統操作之一 前言

2021-06-16 01:34:50 字數 2647 閱讀 2393

我們知道作業系統主要負責管理各種資源,分四大模組,處理機管理、儲存器管理、裝置管理、檔案管理。在上乙個系列我們初步窺探了一下windows環境下作業系統為我們程式設計師提供的記憶體管理介面。而本系列將介紹作業系統提供的檔案管理介面。在正式介紹之前,我們來看看軟體開發中的乙個現象。

我們知道計算機無非在做一件事情,無論它如何複雜和精細。那就是解釋和操作二進位制資料。無論計算機裡呈現的資料多麼精彩而複雜到頭來存放到磁碟裡去後就都是些零一零一之類的東西了。計算機能將那些看似無意義的位元流呈現出繽紛的虛擬世界靠的是什麼呢?無非就是程式。是由程式來解釋資料。也是由於程式的存在,它在物理資料上提供了更多的抽象,更多的資料型別和遮蔽掉一些複雜瑣碎無聊的事情。

現代高階語言提供了豐富的資料型別其功勞莫過於越來越複雜的編譯系統和執行系統。當我們立足的抽象離硬體越遠,離問題域越近,我們擁有的資料型別越多,越豐富,越複雜。隨著人們對軟體需求的不斷增長,為了應付軟體規模自身的複雜性,我們需要將抽象分層來。當我們討論乙個合理的系統架構的時,我們總會發現那些典型系統的代表都呈現一種合的層次結構。開放系統互聯模型想必大家都很熟悉了,軟體開發中這種層次性遍布系統的各個部分。我們始終相信建立在嚴格測試和經歷時間考驗的構件上的軟體部分是可靠的。當我們在「正確」層面上開發新的應用時,我們沒有必要去過分懷疑我們腳下堅實的土地,我們更應該花精力在我們自己的問題上。這樣我們能更高效快速的開發出可靠的應用程式。

於是站在軟體系統的不同層面上,我們總能有一部分來自更低層次的部件,或稱之為功能部件,基礎部件。它或許是乙個系統呼叫,乙個物件,乙個介面,甚至就是乙個應用程式。如此,大家會發現乙個問題,我們做軟體開發似乎只是在整合一些這種基礎構件。我們自己會開發一些功能模組,但開發的目的也是為了整合。這就是現代軟體開發的方式,只是隨著網路環境的發展,這種功能構件逐漸移向網路環境,於是有了google和其他基礎軟體提供商鼓吹的「雲計算」。是的,無論這些功能模組以如何方式呈現,我們都只是在整合。而事實上,開發基礎部件很複雜,處理業務邏輯組合這些部件同樣困難。

立足於系統開發程式設計師的觀點,開發基礎部件很重要。原因很簡單,基礎軟體構件往往是系統的核心或更本技術。比如,大家對遨遊這款瀏覽器不陌生吧,但誰也都知道它用的是ie的核心,它沒有自己的瀏覽器專利技術。它做得再好,再成功也是建立在ie核心的基礎上,總是美中不足。衝其量就是個不錯的二次開發作品。而相比之下火狐就有自己獨到的基礎技術,於是挑起了當前這場紅紅火火的瀏覽器戰爭,跟ie打得熱火朝天。通過這個對比我們不能發現,開發基礎技術構件就是我們真正學計算機,我們計算機專業人員應該幹的事情。我們應該想著如何開發photoshop,而不是如何去使用;如何開發資料庫管理系統而不是如何使用資料庫(當然掌握資料庫技術是相當重要的啦。);如何開發高效能3d引擎,而不是沉溺於他國的先進api。是的,這就是我一直以來的態度,學習計算機就是要想辦法開發出屬於我們自己的平台。

回到我們的windows環境下,我們將要觀察的是windows平台上如何操作它提供的檔案系統。它所暴露出的系統呼叫api就是我們的基礎構件,我將將它們簡單包裝一下,開發出乙個個簡單易用的c++類。這就是一種整合。熟悉作業系統,熟悉基礎技術相信是我們每乙個學習計算機的人必須經歷的階段吧。在能夠開發出我們自己的平台之前不妨看看人家成功的經驗。當然這對如何開發另乙個windows的幫助是極小的。真正核心的源**都秘密的儲存在微軟公司某處吧。但這是我們需要經歷的乙個階段。

好了,我們看看立足於作業系統層面和立足於那些大型類庫或更加高階的開發系統有什麼不同。前面不是很明白的說了,很多人都在做整合不是嗎?於是用高階技術與低階技術有區別嗎?反正我們的目的就很簡單,就是開發滿足業務需求的軟體應用,如果所有業務模組都有了,我只拼拼湊湊那就再好不過了,不是嗎?於是有個問題來了,那些業務模組誰開發,業務模組的子模組誰開發,那些子模組所依賴的平台,類庫誰開發;那些平台和類庫所依賴的作業系統環境誰開發,硬體誰去做。無論哪個環節,都有許許多多的人在從事不是嗎?那麼作為系統軟體程式設計師的我們該如何擺放自己的位置呢?

我相信讓他人抓著自己的靈魂,帶著鐐銬跳舞是一件痛苦的事情。我同樣能夠想象到那些所謂某一技術領域的高手是多麼痛苦,新的技術標準,新的技術構思層出不窮,於是自己不斷的學習,並以此賣弄自己是mvp之類。為什麼這些遊戲規則不是我們自己做?為什麼你只滿足於當乙個高階使用者。真正的程式設計師應該有屬於自己的平台。當然,我以上的觀點有些過激了,但我希望那些真正熱愛程式的人去思考思考。我真的希望我在我們自己的平台上是個白痴,也不想只做他人平台上乙個優秀的客戶。這當然有很多艱難,很多困難要克服。那請我們時刻告誡自己,終有一天,我們要開發出屬於我們的平台,這個遊戲規則的制定我也要參與。

好了,好了。有朋友不耐煩了不是嗎?我的很多想法不就像初出茅廬的野小子的狂妄不是嗎?的確如此。現在的我很矛盾,我太沉迷於微軟的很多技術。而且想盡快學習,我需要乙份工作,我需要生存下去。我必須工作,必須有可以實用的技能。在商業界和工業界,乙個小小的程式設計師算什麼(在我們中國尤其如此,不是嗎)?或許這才是抑制我們大膽研究基礎技術的原因吧。但我始終相信,你選擇了做程式設計師,你就有一顆永遠不甘只做乙個終端使用者的心。那就請我們一起努力吧,讓世界知道我們中國程式設計師的無限創造力。我也將努力接近自己最初的夢想。

那就看看我們這個系列將要接觸的一些話題吧:先是windows檔案系統的整體概述,然後是驅動器資訊的操作;目錄資訊的操作;最後是檔案資訊的操作。當然這裡並沒有打算討**件的建立,讀寫等。我們討論的中心是檔案系統資訊的操作。最後我會簡單封裝一下c語言的檔案操作作為附錄參考,當然上一系列欠缺的虛擬記憶體的簡單操作也會作為附錄補上。

下一節,windows檔案系統概述。

此教程**於97xxoo教程網(

www.97xxoo.org)檢視完整的教程請點:

檔案系統筆記之一

url basename url 返回index.php字串,dirname url 返回返回有4個下標的關聯陣列 建立檔案 touch text.txt 在當前目錄下建立乙個text檔案,但一般不用這個函式建立,而是用寫檔案的函式file put contents text.txt string內...

Windows檔案系統 NTFS檔案系統

windows作為最流行的個人計算機作業系統,成為了我們學習 工作和生活的一部分。我們幾乎每天都會經歷開啟檔案管理器,進入具體磁碟,開啟具體檔案,而windows採用檔案系統管理著所有的檔案和磁碟空間,這個檔案系統就是ntfs。ntfs檔案系統 文件主要分為兩大部分 1.ntfs檔案系統簡介 2.檔...

windows 檔案系統

檔案系統是作業系統用於明確儲存裝置 磁碟 固態硬碟 上組織檔案的方法。從系統角度來看,檔案系統是對檔案儲存裝置的空間進行組織和分配,負責檔案儲存並對存入的檔案進行保護和檢索的系統。fat32分割槽格式採用32位的檔案分配表,使其對磁碟的管理能力大大增強,突破了fat16對每乙個分割槽的容量只有2gb...