private FSBlock GetBlockToEdit() { FSBlock ret = _StartBlock; while (ret.NextBlock != 0) { ret = FSBlock.Read(_StartBlock.Partition, _StartBlock.NextBlock); } if (ret.BlockNumber == _StartBlock.BlockNumber) { ret = FSBlock.GetFreeBlock(part); ret.Used = true; ret.ContentSize = 0; ret.NextBlock = 0; _StartBlock.NextBlock = ret.BlockNumber; FSBlock.Write(part, _StartBlock); FSBlock.Write(part, ret); } if (part.NewBlockArray(1).Length - ret.ContentSize < 12) { FSBlock b = FSBlock.GetFreeBlock(part); if (b == null) { return(null); } ret.NextBlock = b.BlockNumber; FSBlock.Write(part, ret); b.Used = true; ret = b; } return(ret); }
public void WriteAllBytes(Byte[] Data) { if (_StartBlock.NextBlock != 0) { FileSystem.ClearBlocks(_StartBlock); _StartBlock.NextBlock = 0; FSBlock.Write(FileSystem.mFS.Partition, _StartBlock); } int index = 0; FSBlock curb = FSBlock.GetFreeBlock(FileSystem.mFS.Partition); _StartBlock.NextBlock = curb.BlockNumber; FSBlock.Write(part, _StartBlock); do { Byte[] arr = new Byte[FSBlock.MaxBlockContentSize]; index = Utils.CopyByteToByte(Data, index, arr, 0, arr.Length); curb.Used = true; curb.Content = arr; if (index != Data.Length) { FSBlock b = FSBlock.GetFreeBlock(FileSystem.mFS.Partition); curb.NextBlock = b.BlockNumber; curb.ContentSize = (uint)arr.Length; FSBlock.Write(FileSystem.mFS.Partition, curb); curb = b; } else { curb.ContentSize = (uint)(Data.Length % arr.Length); FSBlock.Write(FileSystem.mFS.Partition, curb); } }while(index != Data.Length); EditEntryInfo(EntryInfoPosition.DateTimeModified, Environment.DateTime.Now.TimeStamp); EditEntryInfo(EntryInfoPosition.DateTimeLastAccess, Environment.DateTime.Now.TimeStamp); }
protected static FSBlock CreateEntry(Partition p, String name) { return(CreateEntry(p, FSBlock.GetFreeBlock(p), name)); }