Bittte helft einem kleinen Nub



  • Hallo
    Ich bin ein ziemlicher Nub (NOCH, hoffe ich :D)
    Vor kurzem hat ein Freund mich gebeten, nen Quell in C++ zu "übersetzten",war ne Art Vb-WinApi Misch Masch.
    Hmm und da ich wie gesagt noh ziemlich unerfahren bin gelingt es mir irgendwie net wirklich.Das programm soll bewirken dass z.b von inem angeben pfad weiter aus alles Files mit deren Path aufgelistet wird.
    Hier de Quell:

    void CLaufwerkeerfassenDlg::GetFiles(CString Root)
    {
    CString File,Patt;
    HANDLE hFile;
    WIN32_FIND_DATA FD;

    Patt = ".";

    LPCTSTR pRootPatt = new TCHAR[Root.GetLength() + Patt.GetLength() + 1];
    _tcscpy(pRootPatt,Root + Patt);

    hFile = FindFirstFile(pRootPatt,&FD);

    if (hFile==0) return;

    do
    {
    File = FD.cFileName;

    if(FD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY)
    {
    if ((File != ".") && (File != ".."))
    {
    LPCTSTR pRootFile = new TCHAR[Root.GetLength() + File.GetLength() + 2];
    _tcscpy(pRootFile,Root + File + "\");
    m_ctlList1.AddString(pRootFile);
    GetFiles(Root + File + "\");

    }
    }

    else
    {
    LPCTSTR pRootFile = new TCHAR[Root.GetLength() + File.GetLength() + 2];
    _tcscpy(pRootFile,Root + File + "\");
    m_ctlList1.AddString(pRootFile);

    }
    }while(FindNextFile(hFile,&FD) == TRUE);
    FindClose(hFile);

    }

    un ich krieg immer diese Fehler:
    C2664: 'strcpy' : Konvertierung des Parameters 1 von 'const char *' in 'char *' nicht moeglich
    überall wo _tcscpy steht.

    Mit dem direkten Zuweisen z.b pRootPatt = Root + Patt; krieg ich zwar dann keine Fehler,bekomme aber dann in de LIstBox nur absolutes Schwachsinn raus.

    Ich wäre echt froh ,wenn jemand den Quell druchgehen könnte.
    Denn ihr wisst ja aus fehlern lernt man ja und ich hab noch viel zu lernen :).
    Ganz dickes Dankeschön fürs Lesen.



  • Hmm ... Da wir hier im MFC-Forum sind, dein Code aber grösstenteils WinAPI ist, verweise ich dich auf die FAQ, dort hast du ein komplettes Beispiel, welches genau das erledigt, was du machen willst. Mit der MFC.

    Um dein Problem zu lösen müsste es eigentlich reichen, wenn du folgende Zelie:

    LPCTSTR pRootPatt = new TCHAR[Root.GetLength() + Patt.GetLength() + 1];
    

    so abänderst:

    TCHAR *pRootPatt = new TCHAR[Root.GetLength() + Patt.GetLength() + 1];
    

    Aber deine _tcscpy's sind auch alles andere als korrekt ...
    Ich würde mal sagen, das muss immer so aussehen:

    CString strRootPatt = Root + Patt;
    _tcscpy(pRootPatt,strRootPatt.GetBuffer(strRootPatt.GetLength()));
    strRootPatt.ReleaseBuffer();
    

    Du siehst, etwas umständlich, wenn du WinAPI mit MFC mischst 😉 Machs besser einheitlich. Beispiel dazu, wie gesagt, in der FAQ.



  • Achja: Verwende bitte CodeTags, wenn du Code postest ...



  • Klasse Danke
    Probier ich gleich aus
    aber zwei Fragen:
    Gibt es eine Suchfunktion für die FAQ?
    Wie verwende ich CodeTags??



  • Sorry hab noch was vergessen
    Muss ich eigentlich diese Zeiger wieder löschen?

    TCHAR *pRootPatt = new TCHAR[Root.GetLength() + Patt.GetLength() + 1];

    ja oder?



  • Hi,

    @PsychoSam

    Gibt es eine Suchfunktion für die FAQ?

    Ich glaube die gibt es bald wieder.

    Wie verwende ich CodeTags??

    Wenn du einen Beitrag erstellst gibt es einen Knopf mit der Aufschrift "C++ Code". 😉

    MFG
    Kai



  • Ja den musst du wieder Löschen.

    [ Dieser Beitrag wurde am 01.08.2002 um 16:23 Uhr von KaiE editiert. ]



  • Hallo da bin ich wieder
    Hmm leider binc ih immer noch net weiter.Zwar krieg ich keine Fehler mehr,dafür aber bekomm ich keine SubFolder und wenn dann höchstens eine Stufe runter vom Stammverzeichnis(von dieseb Subfolder aber keine Dateien).Leider kann ich den Fehler wirklich net finde.
    Wäre für Hilfe echt dankbar.

    void CLaufwerkeerfassenDlg::GetFiles(CString Root)
    {
        CString File,Patt,strRootFilePath,strRootFile;
        HANDLE hFile;
        WIN32_FIND_DATA FD;
    
        Patt = "*.*";
    
        TCHAR *pRootPatt = new TCHAR[Root.GetLength() + Patt.GetLength() + 1]; 
        CString strRootPatt = Root + Patt;
        _tcscpy(pRootPatt,strRootPatt.GetBuffer(strRootPatt.GetLength()));
        strRootPatt.ReleaseBuffer();
    
        hFile = FindFirstFile(pRootPatt,&FD);
        delete [] pRootPatt;
    
        if (hFile==0) return;
    
        do
        {
            File = FD.cFileName;
    
            if(FD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == FILE_ATTRIBUTE_DIRECTORY)
            {
                if ((File != ".") && (File != ".."))
                {
                    TCHAR *pRootFilePath = new TCHAR[Root.GetLength() + File.GetLength() + 2];
                     strRootFilePath = Root + File + "\\";
                    _tcscpy(pRootFilePath,strRootFilePath.GetBuffer(strRootFilePath.GetLength()));
                    strRootFilePath.ReleaseBuffer();
    
                    m_ctlList1.AddString(pRootFilePath);
                    GetFiles(strRootFilePath);
                    delete [] pRootFilePath;
    
                }
            }
    
            else
            {
                    TCHAR *pRootFile = new TCHAR[Root.GetLength() + File.GetLength() + 1];
                     strRootFile = Root + File;
                    _tcscpy(pRootFile,strRootFile.GetBuffer(strRootFile.GetLength()));
                    strRootFile.ReleaseBuffer();
                    m_strEdit1 = *pRootFile;
                    UpdateData(FALSE);
                    m_ctlList1.AddString(pRootFile);
                    delete [] pRootFile;
    
            } 
        }while(FindNextFile(hFile,&FD) == TRUE);
        FindClose(hFile);
    
    }
    

Anmelden zum Antworten