Announcement

Collapse
No announcement yet.

Is_FileName

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

  • Is_FileName

    Gibt es eine Routine (System-API oder Jedi oder Alternative) die einen String dahin testen ob es sich bei dem String um einen gültigen Dateinamen handelt.<br>
    function Is_FileName(FileName: string): boolean;<br>
    <br>
    Dietmar

  • #2
    Hallo,

    &gt;..ob es sich bei dem String um einen gültigen Dateinamen handelt.

    die IF-Abfrage über die SysUtils-Funktion <b>FileExists</b>(sStringMitDateiname) sollte diese Frage beantwortet

    Comment


    • #3
      Besten Dank Herr Kosch,<br>
      ich dachte mehr an sowas:
      <PRE>
      function Is_FileName(FileName: string): boolean;
      // \ / : * ? " < > | sind nicht zulässig
      const
      maxFileLaenge = 50;
      var
      FileLaenge: integer;
      begin
      FileLaenge:= length(FileName);
      result:= (FileLaenge > 0) and
      (FileLaenge < maxFileLaenge) and
      (FileName[FileLaenge] <> '.') and // soll nicht sein
      (pos('\', FileName) = 0) and
      (pos('/', FileName) = 0) and
      (pos(':', FileName) = 0) and
      (pos('*', FileName) = 0) and
      (pos('?', FileName) = 0) and
      (pos('"', FileName) = 0) and
      (pos('<', FileName) = 0) and
      (pos('>', FileName) = 0) and
      (pos('|', FileName) = 0);
      end;
      </PRE>
      Alle Angaben ohne Gewähr!
      <br>
      Dietma

      Comment


      • #4
        Das hängt leider vom Dateisystem und vom verwendeten Subsystem ab.

        Zum Beispiel ist ':' auf NTFS durchaus möglich (um Streams anzusprechen) und im Posix-Subsystem gelten andere 'verbotene' Zeichen für Dateinamen (das Posix-Subsystem wird kaum verwendet - geht eher um das Beispiel, dass man in einem Subsystem Dateien anlegen kann, die in einem anderen nicht erlaubt/möglich wären)

        Comment


        • #5
          Hallo Dietmar,

          in der Unit "JvFileUtil.pas" der JVCL (Download unter http://sourceforge.net/project/showfiles.php?group_id=45786) gibt es eine Routine "ValidFileName", die vielleicht das tut, was du möchtest:

          <PRE>function ValidFileName(const FileName: string): Boolean;

          function HasAny(const Str, Substr: string): Boolean;
          var
          I: Integer;
          begin
          Result := False;
          for I := 1 to Length(Substr) do
          begin
          if Pos(Substr[I], Str) > 0 then
          begin
          Result := True;
          Break;
          end;
          end;
          end;

          begin
          Result := (FileName <> '') and (not HasAny(FileName, '<>"[]|'));
          if Result then
          Result := Pos('\', ExtractFileName(FileName)) = 0;
          end;

          </PRE>

          Gruß, Werne

          Comment


          • #6
            Hallo,<br>
            da ich davon ausgehe, daß sowas vom Betriebssystem und vom Dateisystem abhängig ist, dachte ich an eine System-API, bevor ich mir selbst was bastele.<br>
            Vielen Dank an alle.<br>
            Dietma

            Comment


            • #7
              gaaanz dumme Idee: Warum versuchst Du nicht die Datei zu erzeugen, und wenn eine Exception auftritt...

              Vielleicht kann man die Funktionen ExtractFilePath und ExtractFileName 'zweckentfremden'

              Comment

              Working...
              X