Pfadname für CFile::Open
-
Guten Tag,
ich hab ein Problem beim Öffnen einer Datei.hier wähle ich über ein Dialogfenster meine Datei aus. Der Pfad der Datei wird in die "m_sGetFileName" Variable geschrieben.
void CPropPage5::OnBnClickedButtonBrowse() { CFileDialog fileDlg (TRUE); if( fileDlg.DoModal ()==IDOK ) { m_sGetPathName = fileDlg.GetPathName(); // schreibt Pfadname in mVariable m_sGetFileName = fileDlg.GetFileName(); SetDlgItemText(IDC_EDIT_PATH, m_sGetPathName); // zeigt Pfad in Textzeile an cbStart.EnableWindow(TRUE); // aktiviert StartUpdate button m_hFile = CreateFile(m_sGetPathName, GENERIC_READ, // erzeugt ein HADNLE der Datei FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); m_nFileSize = GetFileSize(m_hFile, NULL); // ermittelt Dateigröße } }
hier möchte ich mit hilfe des dateipfads, den ich vorher ausgewählt und die die variable geschrieben habe die datei öffnen.
CFile f; if( !f.Open( m_sGetPathName.GetString(), CFile::modeRead, &e ) ) { #ifdef _DEBUG afxDump << "File could not be opened " << e.m_cause << "\n"; #endif }
das problem ist allerdings das es so nicht funktioniert, weil er den pfad so nicht an nimmt. schreibe ich allerdings den Pfad selber in eine variable gehts, obwohl es genau das gleiche ist.
kann mir da jemand helfen?
mfg Schorsch
-
Hallo,
versuch an der Stelle, an der du den Dialog erstellst, mal den folgenden Code:
CFileDialog fileDlg(TRUE, _T("lst"), _T("*.lst*"), OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, NULL,this);
Der 2. und 3. Parameter sorgt dafür, dass nur Dateien mit dieser Endung angezeigt werden, der 4. Parameter sind Flags die gesetzt werden können. Hier kannst du auch andere nutzen.
Ob es daran liegt, kann ich dir aber nicht sagen, das ich auch noch relativ neu bin. Hoffe trotzdem dir geholfen zu haben.
-
Auf jeden Fall hast du schon mal das Handle der Datei was du bei CreateFile bekommen hast nicht geschlossen.
-
Auf jeden Fall hast du schon mal das Handle der Datei was du bei CreateFile bekommen hast nicht geschlossen.
Was willst Du mit CreateFile(...) erreichen? Die Dateigröße bekommst Du auch mit:
m_nFileSize =f.GetLength();
Ist die Variable m_sGetPathName ein CString? Dann lass mal beim Open das ".GetString()" weg, oder ersetze es durch ".GetBuffer()". Anschließend solltest Du dann m_sGetPathName.ReleaseBuffer() aufrufen.