/// <summary> /// 初始化数据块 /// </summary> public void InitDataBlock() { byte[] writeTo; _initSuper._s_nfree = 0; _initSuper._s_free[_initSuper._s_nfree++] = 0; _diskFile.OpenFile(); //从最后一块往前走,每100块之前的一块为管理块 //其内容包括 //1:该管理块管理的块数 //2:该管理块管理的所有块号 for (int i = _dataBlkNum - 1; i >= 0; --i) { if (_initSuper._s_nfree >= 100) { //找到要写入的位置,将s_nfree和s_free写入i + datablkstart号磁盘块 _diskFile.SeekFilePosition(_diskFile.ConvertPosition(i + _dataBlkStart, 0), System.IO.SeekOrigin.Begin); //转换成流,写入磁盘 writeTo = Helper.Struct2Bytes(_initSuper._s_nfree); _diskFile.WriteFile(ref writeTo, 0, 4); for (int j = 0; j < _initSuper._s_nfree; ++j) { //转换成流,写入磁盘 writeTo = Helper.Struct2Bytes(_initSuper._s_free[j]); _diskFile.WriteFile(ref writeTo, 0, 4); } _initSuper._s_nfree = 0; } //数组元素初始化(数组元素用于管理空闲块号) _initSuper._s_free[_initSuper._s_nfree++] = i + _dataBlkStart; } //关闭磁盘文件 _diskFile.CloseFile(); //将更新后的超级快信息写回 _initSuper.UpdateSuperBlockToDisk(); }