Open Most Recent File

This is very simple, but I had never seen it anywhere else until I had to do it myself. It should save everyone some digging through the documentation.

To make your program re-open the most recently used file, simply add the following code to your App’s InitInstance() between the calls to ParseCommandLine() and ProcessShellCommand().


// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// ================= Begin Inserted code =========================
// If a file is not specified on the command line, open the last file
if ( ! cmdInfo.m_strFileName.GetLength() )
{
CString strFileName;
if (m_pRecentFileList->GetDisplayName(strFileName, 0, “”, 0, true))
{
cmdInfo.m_strFileName = strFileName;
cmdInfo.m_nShellCommand =
CCommandLineInfo::FileOpen;
}
}
// ================== End Inserted code ==========================

// Dispatch commands specified on the command line
if (!ProcessShellCommand(cmdInfo))
return FALSE;

Nico van Ravenstein adds:

There is a problem with opening the most recent file when the filepath is too long. The directory gets abbreviated by the function AbbreviateName like C:some path…file.txt. Thats nice for a windows title or in the last used list but you can’t open a file with it.

So a better way is this:


// Add this to your applications InitInstance function
//
// If a file is not specified on the command line, open the last file
if (!cmdInfo.m_strFileName.GetLength())
{
if (m_pRecentFileList->m_nSize > 0 &&
!m_pRecentFileList->m_arrNames[0].IsEmpty())
{
cmdInfo.m_strFileName = m_pRecentFileList->m_arrNames[0];
cmdInfo.m_nShellCommand = CCommandLineInfo::FileOpen;
}
}

Updated 4 April 1998

More by Author

Must Read