コード例 #1
0
        /// <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();
        }