Announcement

Collapse
No announcement yet.

Dateien löschen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Jochen,<BR>
    chmod() ist sehr einfach gestrickt und kennt nur S_IWRITE und S_IREAD, und wenn beide gesetzt sind (durch das oder "|") dann ist alles gesetzt was gesetzt werden kann. Der Rest der Flags wird nicht angefasst. Ändern und Löschen gehört wohl auch zum Schreiben. Durch das weglassen von S_IWRITE wird das read-only Bit gesetzt, ansonsten eben gelöscht. <BR><BR>Armi

    Comment


    • #17
      Hallo Markus,

      um die Vewirrung komplett zu machen...<BR>
      Ich habe hier auch noch mal ein bißchen getestet. Wenn faSysFile oder faReadOnly gesetzt sind, kann die Datei nicht gelöscht werden. Es reicht aber definitiv bei den iAttributes |= faAny anzugeben, um die Datei zu finden.<BR>
      Hier nochmal die komplette Routine, die alle Dateien löscht, aber Verzeichnisse überspringt:
      <PRE>
      TSearchRec sr;
      AnsiString UpdateFiles = "*.*";
      AnsiString UpdateFilesDir = "c:\\temp\\";
      int iAttributes = 0;
      iAttributes |= faAnyFile;
      if (FindFirst(UpdateFilesDir + UpdateFiles, iAttributes, sr) == 0)
      {
      do
      {

      try
      {
      // RichEdit1->Lines->Add(sr.Name) ;
      int curAttrib = FileGetAttr(UpdateFilesDir + sr.Name);
      if (curAttrib & faDirectory)
      continue; // Verzeichnisse überspringen
      if (curAttrib & faSysFile || curAttrib & faReadOnly)
      {
      FileSetAttr(UpdateFilesDir + sr.Name, 0); // alle Attribute 'löschen'
      }
      DeleteFile(UpdateFilesDir + sr.Name);
      }
      catch(...)
      {
      Application->MessageBoxA("Datei konnte nicht gelöscht werden!", "Fehler", MB_ICONEXCLAMATION);
      }
      } while (FindNext(sr) == 0);
      }
      FindClose(sr);
      </PRE>

      Ich weiß zwar nicht, ob das so die optimale Lösung ist, aber es funktioniert...

      Grüße Joche

      Comment


      • #18
        ...und weg sind sie :=)

        Das wars.

        @Armini
        Ich hab jetzt die Variante von Jochen genommen, da ich mich mir der schon ziemlich viel befasst habe.
        Deine hat allerdings interessante Ansätze, die ich mir mal bei nächster Gelegenheit zu Gemüte führen werde.
        Nur jetzt alles wieder umbauen wollt ich nicht.

        Danke vielmals an alle !

        Gruß Marku

        Comment


        • #19
          Hi alle,

          hier eine (fast reine) API-Variante als Alternative:

          <pre>
          bool DelFilesFromDir(String dir)
          {
          //Löscht alle Dateien in _dir und gibt zurück, ob erfolgreich oder nicht
          bool found = true;
          bool error = false;
          WIN32_FIND_DATA filedata;
          HANDLE filehandle = FindFirstFile((dir + "\\*.*").c_str(), &filedata);
          found = (filehandle != INVALID_HANDLE_VALUE);
          while ((found == true) && (error == false))
          {
          if ((filedata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
          {
          error = !DeleteFile(dir + "\\" + filedata.cFileName);
          }
          found = FindNextFile(filehandle, &filedata);
          }
          FindClose(filehandle);
          return !error;
          }
          //---------------------------------------------------------------------------
          </pre>

          Ich schätze Borland's FindFirst und FindNext kapseln lediglich Microsofts FindFirstFile und FindNextFile.

          Gruß,<br>
          Ja

          Comment

          Working...
          X