1
Reply

How to free a document?

gerald.weibl

gerald.weibl

Aug 27 2004 4:55 AM
2.2k
Hallo! I am writing a Web Application in C#. I use dsofile.dll to get the Custom Properties of Office Documents. Tha functions very well. But when i reload my page I get an Error message. Here is my Code: [CODE] protected System.Web.UI.WebControls.Table myTable; protected DSOleFile.CustomProperties custProps; protected DSOleFile.PropertyReader objPropReader; protected DSOleFile.DocumentProperties objDocumentProps; private void Page_Load(object sender, System.EventArgs e) { try { string strDirectory = @"c:\temp"; objPropReader = new DSOleFile.PropertyReaderClass(); ArrayList arrListDocumentFullName = new ArrayList(); ArrayList arrListDocumentName = new ArrayList(); DirectoryInfo di = new DirectoryInfo(strDirectory); FileInfo[] rgFiles = di.GetFiles("*.doc"); foreach(FileInfo objFileInfo in rgFiles) { System.IO.FileAttributes objAttrFile = System.IO.File.GetAttributes(objFileInfo.FullName); if ((objAttrFile & (System.IO.FileAttributes.Hidden | System.IO.FileAttributes.System)) != 0) { Response.Write(objFileInfo.Name + ": Hidden Datei
"); } else { arrListDocumentFullName.Add(objFileInfo.FullName); arrListDocumentName.Add(objFileInfo.Name); } } int intPropCount = 0; object[] objIndex; string strSharePath = @"\\wlcomgtd\temp\"; string strFileName = ""; string strValue = ""; for(int i = 0; i < arrListDocumentFullName.Count; i++) { strFileName = arrListDocumentFullName[i].ToString(); objDocumentProps = objPropReader.GetDocumentProperties(strFileName); System.Runtime.InteropServices.Marshal.ReleaseComObject(objPropReader); objPropReader = null; intPropCount = objDocumentProps.CustomProperties.Count; objIndex = new object[intPropCount]; object obj = null; TableRow row = new TableRow(); TableCell cellName = new TableCell(); cellName.Text = arrListDocumentName[i].ToString(); cellName.RowSpan = 2; cellName.BackColor = Color.White; row.Cells.Add(cellName); for(int a = 1; a < intPropCount+1; a++) { obj = a; objIndex[a-1] = objDocumentProps.CustomProperties[obj].Name; TableCell cellPropName = new TableCell(); cellPropName.Text = objDocumentProps.CustomProperties[obj].Name; row.Controls.Add(cellPropName); } row.BackColor = Color.LightGray; myTable.Rows.Add(row); TableRow row1 = new TableRow(); for(int y = 0; y < intPropCount; y++) { // strValue = "Nicht vorhanden"; custProps = objDocumentProps.CustomProperties; strValue = objDocumentProps.CustomProperties[objIndex[y]].get_Value().ToString(); TableCell cell2 = new TableCell(); cell2.Text = strValue; row1.Cells.Add(cell2); } myTable.Rows.Add(row1); } System.Runtime.InteropServices.Marshal.ReleaseComObject(objDocumentProps); objDocumentProps = null; GC.Collect(); GC.WaitForPendingFinalizers(); } catch(System.Runtime.InteropServices.COMException ex) { Response.Write(ex.ToString()); } } [/CODE] An this is the error Message which occurs when i wanna reload the page: System.Runtime.InteropServices.COMException (0x80030020): A share violation has occured at DSOleFile.PropertyReaderClass.GetDocumentProperties(String sFileName) at Documentproperties.WebForm1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\documentproperties\webform1.aspx.cs:line 65 I found out that the Process aspnet_wp.exe is locking the Document. When I kill the process manually from the Task Manager I can open the document. How can I implement that, after the Custom Properties have been read, the document is free again? I hope you can help me. Thanks, Gerald.

Answers (1)