/// <summary> /// Flushes current Data. If the file is closed, it means write data to disk; otherwise corresponding file buffer is modified. /// </summary> public void Flush() { if (!dataChangedInBatchMode && IsInBatchMode) { return; } string path = InternalProjectItem.GetFullPath(); if (RDTManager.IsFileOpen(path)) { VLDocumentViewsManager.SaveDataToBuffer(data, path); // modify in-memory buffer of this file } else { // write data to disk ResXResourceWriter writer = null; try { writer = new ResXResourceWriter(path); writer.BasePath = Path.GetDirectoryName(path); foreach (var pair in data) { writer.AddResource(pair.Value); } writer.Generate(); } finally { if (writer != null) { writer.Close(); } } } // regenerate designer item if (DesignerItem != null) { RDTManager.SilentlyModifyFile(DesignerItem.GetFullPath(), (string p) => { RunCustomTool(); }); } }
/// <summary> /// Loads file's content into memory /// </summary> public void Load() { if (IsLoaded) { return; } string path = InternalProjectItem.GetFullPath(); if (RDTManager.IsFileOpen(path)) // file is open - read from VS buffer { VLDocumentViewsManager.LoadDataFromBuffer(ref data, path); } else // file is closed - read from disk { ResXResourceReader reader = null; try { data = new Dictionary <string, ResXDataNode>(); reader = new ResXResourceReader(path); reader.BasePath = Path.GetDirectoryName(path); reader.UseResXDataNodes = true; foreach (DictionaryEntry entry in reader) { data.Add(entry.Key.ToString().ToLower(), entry.Value as ResXDataNode); } } finally { if (reader != null) { reader.Close(); } } } IsLoaded = true; }