Prüfen ob datei verfügbar ist



  • Dankeschön 🙂

    Ich habe den Code jetzt so hingebogen, das wenn man auf Button 1 klickt und sich die datei cd1.id im selben verzeichnis wie die exe befindet, Datei Gefunden! kommt.

    So, das ist ja schonmal nicht schlecht, ich könnte das ganze jetzt auch brennen, aber was ist wenn man die erste CD ins Erste CD-Rom Laufwerk und die zweite in den Brenner legt?

    Dann kommt die Meldung bei CD2, die CD sei nicht eingelegt obwohl das gar nicht stimmt, da ja nur geprüft wird ob die datei im selben verzeichnis wie die exe ist. Ich möchte es so haben, das alle CD-Laufwerke geprüft werden ob sich dort die datei befindet.

    Geht das irgendwie? Danke im Voraus



  • Ein wenig WinAPI für dich. Folgender Code liest alle CD-ROM-Laufwerke aus:

    char drives[256];
    int strlength = (int)::GetLogicalDriveStrings(256, drives);
    int drive_no = strlength / 4;
    
    for(int i=0; i<drive_no; ++i)
    {
       char* cDrive = drives + 4 * i;
       if(::GetDriveType(cDrive) == DRIVE_CDROM)
          MessageBox(NULL, cDrive, "Enumerating CD-ROM drives:", MB_OK);
    }
    


  • BOOL FileExists(LPCTSTR FileName)
    {
       CFileFind* ff = new CFileFind();
       BOOL found = ff->FindFile(lpszFileName);
       delete ff;
       return found;
    }
    

    Was soll den der Mist? Warum auf dem Heap?

    BOOL FileExists(LPCTSTR FileName) {
        CFileFind ff;
        return ff.FindFile(lpszFileName);
    }
    

    Reicht doch völlig, dann wird auch keine extra Statusvariable benötigt? 😕 😕



  • Original erstellt von WebFritzi:
    **Ein wenig WinAPI für dich. Folgender Code liest alle CD-ROM-Laufwerke aus:

    char drives[256];
    int strlength = (int)::GetLogicalDriveStrings(256, drives);
    int drive_no = strlength / 4;
    
    for(int i=0; i<drive_no; ++i)
    {
       char* cDrive = drives + 4 * i;
       if(::GetDriveType(cDrive) == DRIVE_CDROM)
          MessageBox(NULL, cDrive, "Enumerating CD-ROM drives:", MB_OK);
    }
    

    **

    Gut, das funktioniert 🙂 Aber wie kombinier ich das nun mit dem Filefinder?

    CFileFind finder;
    bool founded = finder.FindFile(cDrive +CString ("cd1.id") ,0);
    if(founded)
    {
    MessageBox("Datei gefunden\n");
    }
    else
    MessageBox("Datei nicht gefunden");

    Hierbei passiert folgendes:
    Es wird das Disketten Laufwerk, Festplatte C: Festplatte 😨 und dann erst die cd-roms gecheckt 😕

    Danke im Voraus



  • char drives[256];
    int strlength = (int)::GetLogicalDriveStrings(256, drives);
    int drive_no = strlength / 4;

    for(int i=0; i<drive_no; ++i)
    {
    char* cDrive = drives + 4 * i;
    if(::GetDriveType(cDrive) == DRIVE_CDROM) {
    CFileFind finder;
    bool founded = finder.FindFile(cDrive +CString ("cd1.id") ,0);
    if(founded) {
    MessageBox("Datei gefunden\n");
    } else {
    MessageBox("Datei nicht gefunden");
    }
    }
    }



  • CStdioFile File;
        if(File.Open("d:\\cd1.id",CFile::modeRead,NULL) )
        {
        MessageBox("Datei gefunden");
        }
        else
        {
        MessageBox("Datei nicht gefunden");
        }
    

    Wenn die Datei d:\\cd1.id vorhanden ist kommt Datei gefunden wenn nich halt Datei nicht gefunden.



  • BOOL FileExistsOnCDROM(LPCTSTR lpszFileName)
    {
       char drives[256];
       BOOL retVal = FALSE;
       int strlength = (int)::GetLogicalDriveStrings(256, drives);
       int drive_no = strlength / 4;
    
       for(int i=0; i<drive_no; ++i)
       {
          char* cDrive = drives + 4 * i;
          if(::GetDriveType(cDrive) == DRIVE_CDROM)
          {
             char cFilePath[MAX_PATH];
             lstrcpyn(cFilePath, cDrive, 4);
             strcat(cFilePath, lpszFileName);
    
             if(FileExists(cFilePath))
             {
                retVal = TRUE;
                break;
             }
          }
       }
    
       return retVal;
    }
    

    Jetzt zufrieden?



  • wo muss der Code genau hin?

    hinter
    void CCDCheckerDlg::OnCD1()
    {

    bekomm ich die Meldung:
    'FileExistsOnCDROM' : local function definitions are illegal 😕



  • du fragst immer sachen...ich glaub du solltest erstmal ein buch lesen. ich hab so das gefühl das du fast nichts davon verstehst was du da machst. du fragst nach jeder klitzenkleinigkeit, die man ganz einfach auch selbst rausfinden kann. FANG NIEMALS SOFORT MIT MFC AN, lern erst C++ in der Konsole.



  • Original erstellt von Perner:
    **wo muss der Code genau hin?
    **

    Außerhalb aller anderen Funktionen.

    Jo, dudu hat vollkommen recht. Ich habe langsam auch das Gefühl, dass du keinen blassen Schimmer von alledem hast. Lies dir erstmal ein Tutorial über C++ durch. Auf www.c-plusplus.net gibts da ne Menge von.



  • Original erstellt von <dudu>:
    FANG NIEMALS SOFORT MIT MFC AN, lern erst C++ in der Konsole.

    Öhm, zu spät?



  • :p :p

    Dann geh nochmal zurück... 🙂


Anmelden zum Antworten