8.3 Dos Konformität



  • also ich erstelle ein neues projekt. dabei soll überprüft werden ob die ordner die ich anlege mehr als 8 zeichen lang sind oder ungültige zeichen enthalten.

    das projekt wir so angelegt:

    void CBingenDlg::OnFileNewproject() 
    {
     m_show_main = "";
    
        CFileDialog fd(FALSE,"sdat", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
    
       "Project Files (*.lu)|*.lu|||");
    
    CString csLastDir;
    csLastDir = AfxGetApp()->GetProfileString( "LastSavedFile", "Directory", "");
    
    if(csLastDir.GetLength())
    {
    fd.m_ofn.lpstrInitialDir = csLastDir;
    ::SetCurrentDirectory(csLastDir);
    }
    if(fd.DoModal()==IDOK)
    {
    
    CString PathName = fd.GetPathName();
    char cFileDrive[_MAX_DRIVE];
    char cFileDir[_MAX_DIR];
    char cFileFname[_MAX_FNAME];
    char cFileExt[_MAX_EXT];
    _splitpath(PathName, cFileDrive, cFileDir, cFileFname, cFileExt);
    char cPathName[_MAX_PATH];
    sprintf(cPathName,"%s%s\0",cFileDrive, cFileDir);
    AfxGetApp()->WriteProfileString( "LastSavedFile", "Directory", cPathName);
    
    CreateDirectory(projektname,NULL);
    
    CString bin = projektname + "\\BIN";
    CString link = projektname + "\\LINK";
    CString obj = projektname + "\\OBJ";
    CString source = projektname + "\\SOURCE";
    
    CreateDirectory(bin,NULL);
    CreateDirectory(link,NULL);
    CreateDirectory(obj,NULL);
    CreateDirectory(source,NULL);
    

    also dir ordnerstruktur wir dann in dem angelegten verzeichnis erstellt.

    ich möchte dann aber prüfen ob es sich um einen gültigen pfad handelt.. ist dem nicht so soll der vorgang abgebrochen werden und eine warnmeldung ausgegeben werden.

    vielen dank



  • Das heißt, du willst PathName prüfen?
    Dann mach doch:

    CString strKurzpfad;
    GetShortPathName(PathName, strKurzpfad.GetBuffer(), MAX_PATH);
    if (PathName != strKurzpfad)
    {
        AfxMessageBox(_T("Das ist kein DOS Pfad!"));
    }
    


  • danke soweit erstmal !!!!

    bekomme aber diese fehlermeldung:

    C2660: 'GetBuffer' : Funktion akzeptiert keine 0 Parameter

    muss ich da noch parameter einfügen ? oder wieso akzeptiert er das nicht ??

    danke dir



  • ein weiteres problem ist , dass wenn ich auf diese weise ordner anlege, nur halt cFileDir + cFileFName gespeichert werden. also
    ich gehe in pfad C:\Test erstelle dort den ordner "Mike"

    dann wird mir in meinem pfad nur C:\Test angegeben und nicht C:\Test\Mike
    da ich ja den kompletten pfad inkl dem neu erstellten ordner überprüfen muss.

    danke euch !!



  • So, nun hab ich den Überblick verloren?
    Welche Variablen hast du, was steht drin?

    Poste mal den aktuellen Code und was laut Debugger jeweils in den Variablen steht.



  • void CBingenDlg::OnFileNewproject() 
    {
     m_show_main = "";
    
        CFileDialog fd(FALSE,"sdat", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
    
       "Project Files (*.lu)|*.lu|||");
    
    CString csLastDir;
    csLastDir = AfxGetApp()->GetProfileString( "LastSavedFile", "Directory", "");
    
    if(csLastDir.GetLength())
    {
    fd.m_ofn.lpstrInitialDir = csLastDir;
    ::SetCurrentDirectory(csLastDir);
    }
    if(fd.DoModal()==IDOK)
    {
    
    CString PathName = fd.GetPathName();
    char cFileDrive[_MAX_DRIVE];
    char cFileDir[_MAX_DIR];
    char cFileFname[_MAX_FNAME];
    char cFileExt[_MAX_EXT];
    _splitpath(PathName, cFileDrive, cFileDir, cFileFname, cFileExt);
    char cPathName[_MAX_PATH];
    sprintf(cPathName,"%s%s\0",cFileDrive, cFileDir);
    AfxGetApp()->WriteProfileString( "LastSavedFile", "Directory", cPathName);
    
    MessageBox("Bitte fügen Sie nach dem Erstellen des Projekts die Source-Dateien in den dafür vorgesehenen Ordner.","Source Files");
    
    CString Pfad_drive = cFileDrive;
    CString Pfad_dir = cFileDir;
    
    CString f_Path = Pfad_drive+Pfad_dir;
    
    CString strKurzpfad;
    GetShortPathName(f_Path, strKurzpfad.GetBuffer(), MAX_PATH);
    if (f_Path != strKurzpfad)
    {
        AfxMessageBox(_T("Das ist kein DOS Pfad!"));
    }
    
    CreateDirectory(projektname,NULL);
    
    CString bin = projektname + "\\BIN";
    CString link = projektname + "\\LINK";
    CString obj = projektname + "\\OBJ";
    CString source = projektname + "\\SOURCE";
    
    CreateDirectory(bin,NULL);
    CreateDirectory(link,NULL);
    CreateDirectory(obj,NULL);
    CreateDirectory(source,NULL);
    
    }		
    }
    

    so sieht der code aus. er kommt mit dem buffer aber nicht klar.

    fehler :: lg.cpp(726) : error C2660: 'GetBuffer' : Funktion akzeptiert keine 0 Parameter



  • eig ist ja nur dieser abschnitt wichtig:

    in f_Path steht z.B. "C:\Test\hans\bin\

    CString strKurzpfad;
    GetShortPathName(f_Path, strKurzpfad.GetBuffer(), MAX_PATH);
    if (f_Path != strKurzpfad)
    {
        AfxMessageBox(_T("Das ist kein DOS Pfad!"));
    }
    

    und der getbuffer macht probleme.



  • Komisch, ich habe den Code so aus meinem Projekt rauskopiert, nichtmal die Variablennamen geändert. 😕
    Keine Ahnung, wieso das nicht geht, sorry. 😞



  • hm.. wie könnte ich dem denn auf die schliche kommen ? was will getbuffer denn von mir ? und wieso bei dir nichts ?hast du das ganze irgendwie in einer schleife laufen ? oder sieht dein pfad anders aus ??

    danke



  • geht es mit

    strKurzpfad.GetBuffer(strKurzpfad.Getlength())
    

    auch nicht?

    Tester2



  • neee... geht leider auch nicht. fehlermeldung:

    error C2039: 'Getlength' : Ist kein Element von 'CString'
    c:\programme\microsoft visual studio\vc98\mfc\include\afx.h(368) : Siehe Deklaration von 'CString'



  • habs so jetzt hinbekommen... es funktioniert.
    danke euch !!

    CString strKurzpfad;
    
    GetShortPathName(f_Path, strKurzpfad.GetBufferSetLength(0), MAX_PATH);
    if (f_Path != strKurzpfad)
    {
        AfxMessageBox(_T("Das ist kein DOS Pfad!"));
    }
    


  • error C2039: 'Getlength' : Ist kein Element von 'CString'
    

    Sorry, Schreibfehler, muss heißen:

    GetLength()
    

    Tester2


Anmelden zum Antworten