With actually very little code, I managed to answer a question I've had for some time: "How can I easily publish the dates my content files were last edited?" Thankfully, we have the FileInfo object in .NET. Instantiating it allows us to view the metadata associated with files on the server. I handled this in two parts: one in a common class accessible by every Web form, and the other in specific Web forms. First, the "common" portion: Public Shared Function getContentXmlFileDate(ByVal strFilePath As String) As DateTime '2010.05.12 I want a function that can be called by any of the _main.aspx's that 'will return the timestamp on its corresponding XML file. 'set the return value to datNull by default Dim datFile As DateTime = datNull Dim myFile As FileInfo = New FileInfo(strFilePath) If myFile.Exists Then datFile = myFile.LastWriteTime End If Return datFile End Function Note a reference to a constant called "datNull." It is simply a Date set to the value "1/1/1900", which is the earliest value Microsoft SQL Server would historically allow (in several recent versions). Using an actual NULL would cause terrible things to happen, so datNull was an answer to handling things somewhat gracefully. So, the code above simply asks for the path of a specific XML file, instantiates an object containing its metadata, copies the desired datetime into a variable, and returns that value. If the path is incorrect (the file cannot be found at that path), the variable is returned with it's default value -- datNull. That bit of code actually did all of the heavy lifting here. The remainder is simply a function, local to the Web form, that fills in the blanks for the common function: Private Function getContentDateString() As String '2010.05.12 'calls common.getContentXmlFileDate() Dim strDate As String = String.Empty 'have to do this here --- there is no Server.MapPath() in common Dim datContentDate As DateTime = common.getContentXmlFileDate(Server.MapPath("~/interests.xml")) 'the source function in common will return datNull if an error occurred. 'check to make sure we're not returning the default null datetime. If datContentDate <> datNull Then strDate = datContentDate.ToString() End If Return strDate End Function Called from the appropriate location in the Web form, this local function simply returns that last write date from the common function, in string form. It contains (and passes) the path to the appropriate XML file and receives the date object back. Next, it compares the value of the date object to that of our old friend, datNull. If the two values are inequal, it converts that file's date value to a string and returns it. The string variable that received the return value is checked for length (The return value is String.Empty by default), and, currently, is appended to the page title along with a short string. So, the title "interests - halfgk.com" becomes "interests - halfgk.com (updated 5/11/2010 8:46:10 PM)." Honestly, I'm not entirely happy with how I've implemented the display at this point. But I'm thrilled I've got the data coming back from the file system on the server. (Incidentally, my initial thought was to use JavaScript to plant the value in the status bar of the browser. In IE 8, this worked flawlessly. But Firefox users won't see it by default, because the browser must be configured to allow JavaScript to change the status message. The capability exists, but it's turned off by default. A simple change to the right value in about:config is all that's needed. Of course, you'd have to have everybody who views your web app make this configuration change.) So for now, the value may be found in the "main" web forms of the interests, professional and education sections of the site (although I really only needed it for the interests section -- it usually gets updated at least once per week.). Perhaps I'll come up with a better means of implementation shortly. That should be it for now! Contact me using the site's contact form if you have questions. Feel free to use the code in your projects. A shout out in your project would be thoughtful. Also, drop me a line and let me know how you might have tweaked things to better suit your needs. Finally, I wouldn't profess to be THE expert on matters represented in my code -- so drop me a line if you have constructive suggestions, too. I'd like to hear from you! Best, halfgk copyright 2010 halfgk.com