Link to home
Start Free TrialLog in
Avatar of greenguy
greenguy

asked on

Accessing File Properties (such as Title, Subject,Author,Keywords etc...) from .NET

In Windows, when I look at the properties for a file, I see a summary tab that has the Title, Subject, Author, Keywords and Comments.

Can I access these through .NET (I write in C#)?

I would like to develop an image applicaton that reads the Comments from the Summary tab of the file properties to use as a caption for the image - ideally I would love to be able to read and write these properties.

I can't find anything in System.IO, but I am looking for something like:

//get the comments from the summary
string stCaption = File.Properties.Comments;

The application will run on a windows server.

Any ideas?

Thanks in advance
ASKER CERTIFIED SOLUTION
Avatar of Slimshaneey
Slimshaneey
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of fritz_the_blank
This link here should help:

http://builder.com.com/5100-6373_14-5285107.html



<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<script Language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {

      // path to directory
      string strPath = "E:/users/john/personal/files/";
      
      // create an instance of the DirectoryInfo object
      DirectoryInfo objTestDirectory = new DirectoryInfo(strPath);      

      if(objTestDirectory.Exists) {
            output.Text = "Yes, the directory <b>" + strPath + "</b> exists.";
      } else {
            output.Text = "No, the directory <b>" + strPath + "</b> does not exist.";
      }
}
</script>
<html>
<head></head>
<body>
<asp:label id="output" runat="server" style="font: 14px, Arial" /> </body> </html>



<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<script Language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {

      // path to the file
      string strFilePath = "E:/users/john/personal/files/Test_Document.doc";

      // create an instance of the FileInfo object
      FileInfo objTestFile = new FileInfo(strFilePath);      

      if(objTestFile.Exists) {
            output.Text = "The file <b>" + strFilePath + "</b> was found. Here is more information: <br />";
            output.Text += "Name: " + objTestFile.Name + "<br />";
            output.Text += "Location: " + objTestFile.FullName + "<br />";
            output.Text += "Created on: " + objTestFile.CreationTime + "<br />";
            output.Text += "Last modified on: " + objTestFile.LastWriteTime + "<br />";
            output.Text += "File size (in bytes): " + objTestFile.Length.ToString() +
"<br />";                        
            output.Text += "Extension: " + objTestFile.Extension;
      } else {
            output.Text = "Sorry, the  file <b>" + strFilePath + "</b> was not found.";
      }      
}
</script>
<html>
<head></head>
<body>
<asp:label id="output" runat="server" style="font: 14px, Arial"/> </body> </html>

Fritz the Blank
Avatar of greenguy
greenguy

ASKER

Fritz - I appreciate your detailed response; however, I would like to be able to access the Comments and Author properties specifically, and they are not offered in the standard System.IO namespace (that I am aware of).

Slim - That was exactly what I was looking for, almost.  To use that, I would need to register the com object - which works great on my machine, but my web host doesn't offer me that option.  They already compiled the most useful bit of code, so I can't see how they did it or make much use of it.  

That may be as close as I get.

Other thoughts?
>>.and they are not offered in the standard System.IO namespace (that I am aware of).<<

I just did a check and you are, unfortunately, correct about that.

FtB

I found an acceptable answer for now - I was poking around the System.Drawing namespace, and found the PropertyItems collection, which has the comments for .jpg files.

The following code will list all of the various property items for a particular file - including the advanced properties:

System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("test.jpg"));

PropertyItem[] items = img.PropertyItems;

foreach(PropertyItem p in items)
{
      Response.Write("<ul>");
      Response.Write("<li>ID: 0x"+p.Id.ToString("x")+"<br>");
      Response.Write("<li>Length: "+p.Len.ToString()+"<br>");
      Response.Write("<li>Type: "+p.Type.ToString()+"<br>");
      Response.Write("<li>Value: "+System.Text.Encoding.ASCII.GetString(p.Value)+"<br>");
      Response.Write("</ul>");
}

Thanks for the help though.

Any thoughts about what I should do for points?  

Slim - your answer would have worked if I could register the com object on my server.

Thoughts?
Here are some guidelines:

https://www.experts-exchange.com/Web/Web_Languages/ASP/help.jsp#hs5

Good luck with your project,

FtB
A reference is available at http://www.codeproject.com/KB/graphics/exifextractor.aspx with a title of EXIFextractor library to extract EXIF information.