using System; using System.Collections.Generic; using System.Text; using System.IO; namespace VEPROMS.CSLA.Library { public partial class Document { public string DocumentTitle { get { if (_LibTitle == "") return string.Format("Document {0}", _DocID); return _LibTitle; } } } public partial class DocumentInfo { public string DocumentTitle { get { if (_LibTitle == "") return string.Format("Document {0}", _DocID); return _LibTitle; } } public string LibraryDocumentUsage { get { StringBuilder sb = new StringBuilder(); string sep = "\r\nUsed In:\r\n "; foreach (EntryInfo myEntry in DocumentEntries) { foreach (ItemInfo myItem in myEntry.MyContent.ContentItems) { ItemInfo proc = myItem.MyProcedure; sb.Append(sep + proc.MyContent.Number + " - " + proc.MyContent.Text); sep = "\r\n "; } } return sb.ToString(); } } } public class DSOFile : IDisposable { private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); #region Fields private bool _IsDisposed; private static string _TemporaryFolder = null; private DocumentInfo _MyDocument = null; private FileInfo _MyFile = null; private string _Extension = "DOC"; #endregion #region Properties public static string TemporaryFolder { get { if (_TemporaryFolder == null) { // This will create a Temp\VE-PROMS folder in the LocalSettings Folder. //XP - C:\Documents and Settings\{user}\Local Settings\Application Data\Temp\VE-PROMS //Vista - C:\Users\{user}\AppData\Local\Temp\VE-PROMS _TemporaryFolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Temp"; if (!Directory.Exists(TemporaryFolder)) Directory.CreateDirectory(TemporaryFolder); _TemporaryFolder += @"\VE-PROMS"; if (!Directory.Exists(TemporaryFolder)) Directory.CreateDirectory(TemporaryFolder); } return _TemporaryFolder; } } public DocumentInfo MyDocument { get { return _MyDocument; } set { TryDelete(); _MyDocument = value; CreateFile(); } } public FileInfo MyFile { get { return _MyFile; } } public string Extension { get { return _Extension; } set { _Extension = value; } } #endregion #region Private Methods private void TryDelete() { if (_MyDocument == null) return; if (_MyFile == null) return; if (_MyFile.Exists) { try { _MyFile.Delete(); } catch (IOException ex) { _MyLog.Error("TryDelete",ex); } finally { _MyFile = null; _MyDocument = null; } } } private bool _Created = false; private int _Unique = 0; private string Unique { get { string retval = ""; if (_Unique != 0) retval = "_" + _Unique.ToString(); _Unique++; return retval; } } private void CreateFile() { while (!_Created) CreateTemporaryFile(); } private void CreateTemporaryFile() { try { if (_MyDocument != null) { _MyFile = new FileInfo(string.Format(@"{0}\tmp_{1}{2}.{3}", TemporaryFolder, MyDocument.DocID, Unique, Extension)); FileStream fs = _MyFile.Create(); fs.Write(MyDocument.DocContent, 0, MyDocument.DocContent.Length); fs.Close(); _MyFile.CreationTime = _MyDocument.DTS; _MyFile.LastWriteTime = _MyDocument.DTS; _Created = true; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } public void SaveFile() { // TODO: Add Try & Catch logic if (_MyDocument == null) return; Document doc = _MyDocument.Get(); FileStream fs = _MyFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite); Byte[] buf = new byte[_MyFile.Length]; fs.Read(buf,0,buf.Length); fs.Close(); doc.DocContent = buf; doc.UserID = Environment.UserName; doc.DTS = _MyFile.LastWriteTime; doc.Save(); } #endregion #region Constructors public DSOFile(DocumentInfo myDocument) { MyDocument = myDocument; } #endregion #region Destructor ~DSOFile() { Dispose(false); } public void Dispose() { Dispose(false); GC.SuppressFinalize(this); } protected void Dispose(bool disposing) { if (!_IsDisposed) { _IsDisposed = true; TryDelete(); } } #endregion } }