How to verify if a document is already open
Ari Villaca -- villaca@correionet.com.br Saturday, January 18, 1997 Environment: MSVC 4.0/Win95 How can I use the filename parameter of the CWinApp::OpenDocumentFile( LPCTSTR lpszFileName ) to verify if the related document is already opene= d? I need to make sure that short and long filenames are verifyed. For example, if I have Test1.XXX opened, the file verification routine=20 should return TRUE for both C:\WorkSpace\Test1.XXX and C:\WorkSp~1\Test1.XXX filenames.=20 Regards, Ari -------------------------------------------------------------------------= --- - Ari de Moura Villa=E7a e-Mail: villaca@correionet.com.br Av. Moraes Sales, 987 Apto.113 fone: +55 19 232-2440 13010-001 - Campinas, SP fax: +55 19 232-2440 Brasil -------------------------------------------------------------------------= ---
Tim Hagemann -- Tim@way2.net Tuesday, January 21, 1997 Ari, you can do this by processing all document templates and all documents = of this templates in a nested loop: CYourApp::CheckIfLoaded(const char *f_Path) { POSITION l_tempPos,l_docPos; for (l_tempPos =3D GetFirstDocTemplatePosition();l_tempPoss !=3D NULL;) { CDocumentTemplate *l_DocTempl =3D GetNextDocTemplate(l_tempPos) for (l_docPos =3D l_DocTempl->GetFirstDocPosition();l_docPos !=3D = NULL;) { CDocument* l_Doc =3D l_DocTempl->GetNextDoc(l_docPos); ASSERT(l_Doc); if (l_Doc->GetPathName =3D=3D f_Path) return TRUE; } } return FALSE; } (I typed the code in my Mail Program - no compiler has ever seen it...) I'm not sure about the long / short filenames. I my opinion, you only = have to check for the long filename, cause this is the one used in = Win32. Tim Hagemann ifa informationssysteme GmbH
Tim Hagemann -- Tim@way2.net Tuesday, January 21, 1997 Ari, you can do this by processing all document templates and all documents = of this templates in a nested loop: CYourApp::CheckIfLoaded(const char *f_Path) { POSITION l_tempPos,l_docPos; for (l_tempPos =3D GetFirstDocTemplatePosition();l_tempPoss !=3D NULL;) { CDocumentTemplate *l_DocTempl =3D GetNextDocTemplate(l_tempPos) for (l_docPos =3D l_DocTempl->GetFirstDocPosition();l_docPos !=3D = NULL;) { CDocument* l_Doc =3D l_DocTempl->GetNextDoc(l_docPos); ASSERT(l_Doc); if (l_Doc->GetPathName =3D=3D f_Path) return TRUE; } } return FALSE; } (I typed the code in my Mail Program - no compiler has ever seen it...) I'm not sure about the long / short filenames. I my opinion, you only = have to check for the long filename, cause this is the one used in = Win32. Tim Hagemann ifa informationssysteme GmbH
Tim Hagemann -- Tim@way2.net Thursday, January 23, 1997 Ari, you can do this by processing all document templates and all documents of this templates in a nested loop: CYourApp::CheckIfLoaded(const char *f_Path) { POSITION l_tempPos,l_docPos; for (l_tempPos = GetFirstDocTemplatePosition();l_tempPoss != NULL;) { CDocumentTemplate *l_DocTempl = GetNextDocTemplate(l_tempPos) for (l_docPos = l_DocTempl->GetFirstDocPosition();l_docPos != NULL;) { CDocument* l_Doc = l_DocTempl->GetNextDoc(l_docPos); ASSERT(l_Doc); if (l_Doc->GetPathName == f_Path) return TRUE; } } return FALSE; } (I typed the code in my Mail Program - no compiler has ever seen it...) I'm not sure about the long / short filenames. I my opinion, you only have to check for the long filename, cause this is the one used in Win32. Tim Hagemann ifa informationssysteme GmbH
Ari Villaca -- villaca@correionet.com.br Sunday, January 26, 1997 Environment: MSVC 4.0 Windows 95 HI Tim, Thanks for your replay to my question above. My real problem was to expand a short filename to a long one. It's interesting to note that in Windows 95 the filename you get in CWinApp::m_lpCmdLine can be short or long depending the way you start you= r application. And you can start an application in many different ways in Windows95. Since CDocument::GetPathName returns the path name CWinApp::m_lpCmdLine provided it is necessary, in Windows 95, to expand the short filename and call CDocument::SetPathName before you verify if a document is already opened. Now I expand short filenames as follows (forgive me any typos, cut-and-paste, translation from portuguese...): //expands a short filename //ex. given "c:\worksp~1\longfi~1.xxx" ExpandFileName returns "c:\workspace\longfilename.xxx" // given "c:\workspace\longfilename.xxx" ExpandFileName returns "c:\workspace\longfilename.xxx" CString CMyApp::ExpandFileName( CString sSupposedShortFileName ) { WIN32_FIND_DATA FileData; FileData.cFileName[0] =3D '\0'; CString sFileName =3D sSupposedShortFileName; CString sTempFileName =3D ""; CString sExpandedFileName =3D ""; CString s1 =3D ""; while ( sFileName.GetLength() > 0 ) { int i; if ( ( i =3D sFileName.Find( '\\' ) ) !=3D -1 ) { sTempFileName =3D sExpandedFileName + sFileName.Left( i ); sFileName =3D sFileName.Right( sFileName.GetLength() - i - 1); FindFirstFile( sTempFileName, &FileData ); if ( FileData.cFileName[0] !=3D '\0' ) { s1 =3D " "; int j =3D 0; while ( FileData.cFileName[j] !=3D '\0' ) { s1.SetAt( 0, FileData.cFileName[j] ); sExpandedFileName +=3D s1; j++; } } else sExpandedFileName =3D sTempFileName; FileData.cFileName[0] =3D '\0'; sExpandedFileName +=3D " "; sExpandedFileName.SetAt( sExpandedFileName.GetLength() - 1, '\\' ); } else { sTempFileName =3D sExpandedFileName + sFileName; sFileName =3D ""; FindFirstFile( sTempFileName, &FileData ); if ( FileData.cFileName[0] !=3D '\0' ) { s1 =3D " "; int j =3D 0; while ( FileData.cFileName[j] !=3D '\0' ) { s1.SetAt( 0, FileData.cFileName[j] ); sExpandedFileName +=3D s1; j++; } } else sExpandedFileName =3D sTempFileName; FileData.cFileName[0] =3D '\0'; } } return sExpandedFileName; } As usual, comments, enhancements, critics etc etc to method above are ver= y wellcome. Best regards, Ari -------------------------------------------------------------------------= --- - Ari de Moura Villa=E7a e-Mail: villaca@correionet.com.br Av. Moraes Sales, 987 Apto.113 fone: +55 19 232-2440 13010-001 - Campinas, SP fax: +55 19 232-2440 Brasil -------------------------------------------------------------------------= ---
| Вернуться в корень Архива |