Abfrage der Dateinamen-Erweiterung für CArchive

ensae

Grünschnabel
Hallo

folgendes Problem: Ich habe eine serialisierte Klasse
CDaten mit der entsprechenden Serialize-Funktion
Das Laden möchte ich jetzt je nach gewählter Dateinamen-
Erweiterung unterschiedlich behandeln. Also in der Art
Code:
void CDaten::Serialize( CArchive& archive )
{
    // call base class function first
    // base class is CObject in this case
    CObject::Serialize( archive );

    // now do the stuff for our specific class
  if( archive.IsStoring() )
  {
    if(Erweiterung=xyz)
      ...
    else
      ...
  }
  else
  {
    ...
  }
}

Mit
Code:
CFile* Dateinamen=archive.GetFile();
bekomme ich ja auch an den Dateinamen in meiner
Klasse und könnte mir die Erweiterung irgendwie
rauspräparieren. Aber gibt es keine Möglichkeit an
GetFileDialog::GetFileExt() ranzukommen?

Grüße

Christian
 
Die Funktion von CFileDialog kannst Du so nicht verwenden, da sie nur auf den Dateinamen im Dialog zugreift. Ich weiß keine andere Lösung als das:
Code:
   CFile * pFile = archive.GetFile();  //Zeiger auf CFile
   CString cstrFilename = pFile->GetFileName();    //Dateiname.Ext holen
   int iIndex = cstrFilename.Find('.');   //Punkt suchen
   CString cstrExt = cstrFilename.Mid(iIndex + 1);  //Extension ausschneiden
Was Eleganteres fällt mir jetzt nicht ein, aber funktionieren müßte es. Ich bin sowieso der Meinung, daß die CString - Klasse eigentlich noch ein paar Memberfunktionen zur Behandlung von Dateinamen und Pfaden haben sollte. Das braucht man immer wieder, muß man immer wieder neu schreiben, wenn man sich nicht die Mühe machen will, eine eigene Klassenbibliothek zu schreiben. Aber das nur am Rande. ;-)

Viele Grüße, jokey2
 
Man muss aber bei der Methode beachten, das ein Dateiname auch Punkte enthalten kann z.B: "Deite.name.txt".

mann sollte also statt CString::Find(..) CString::ReverseFind(...) benutzen, was einen die Position des letzten Punktes angibt welchen man dann auch gefahrloser verwenden kann.

M.f.G. Erik
 
Da hast Du natürlich vollkommen recht. Hätte ich auch dran denken können. :-(
Wie gut, daß es hier noch Leute gibt, die mitdenken.

Grüße an alle Mitdenker,
jokey2
 
Naa - kein Problem - hab mich nur vor kurzem mit der Materie auseinander gesetzt, sonst hätt ich vielleicht auch nicht dran gedacht - ausserdem ich dass ja der Sinn eines Forums ^____^

M.f.G. Erik
 
Zurück