/// <summary> /// Links the specified entry to this directory, updating the entrie's /// short name. /// </summary> /// <param name="entry">the entry to be linked (added) to this directory</param> /// <seealso cref="UnlinkEntry(FatLfnDirectoryEntry)"/> internal void LinkEntry(FatLfnDirectoryEntry entry) { CheckUniqueName(entry.GetName()); ShortName name; name = dbg.Generate83BufferNew(entry.GetName()); entry.RealEntry.SetShortName(name); longNameIndex.Add(entry.GetName().ToLowerInvariant(), entry); shortNameIndex.Add(entry.RealEntry.GetShortName(), entry); UpdateLfn(); }
/// <summary> /// Unlinks the specified entry from this directory without actually /// deleting it. /// </summary> /// <param name="entry">the entry to be unlinked</param> /// <seealso cref="LinkEntry(FatLfnDirectoryEntry)"/> internal void UnlinkEntry(FatLfnDirectoryEntry entry) { var sn = entry.RealEntry.GetShortName(); if (sn.Equals(ShortName.Dot) || sn.Equals(ShortName.DotDot)) { throw new ArgumentException( "the dot entries can not be removed"); } var lowerName = entry.GetName().ToLowerInvariant(); if (!longNameIndex.ContainsKey(lowerName)) { throw new Exception(); } longNameIndex.Remove(lowerName); if (!shortNameIndex.ContainsKey(sn)) { throw new Exception(); } shortNameIndex.Remove(sn); if (entry.IsFile()) { entryToFile.Remove(entry.RealEntry); } else { entryToDirectory.Remove(entry.RealEntry); } }