Schrift
[thread]7556[/thread]

Prüfen ob Verzeichnis?

Leser: 3


<< >> 9 Einträge, 1 Seite
master
 2005-12-20 12:43
#61171 #61171
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Ich bekomme noch die Krise..

Hier der Code:
Code: (dl )
1
2
3
4
  $Datei = 'E:\Projekte\test\GUI\Loeschen\killen';

if(-d $Datei)
{ print 'DIR'; } else {print 'FILE'; }



Und hier die Ausgabe:

FILE
E:\Projekte\test\GUI\Loeschen\killen

----------
Also erkennt es nicht ob es ein verzeichnis ist oder ?:-(
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
esskar
 2005-12-20 12:45
#61172 #61172
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
unless(-f $Datei)
{ print 'DIR'; } else {print 'FILE'; }


oder ist es wirklich eine Datei ;)
master
 2005-12-20 12:48
#61173 #61173
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
jetzt klappts mit -f..

ABER!!!! -f ignoriert doch geräte-dateien...
und das kommt für mich nicht in Frage...
Ich muss GANZ GANZ sicher sein können ob es IRGENDeine Datei oder ein Verzeichnis ist....


---- Auszug aus Selfhtml ---
-f
ermittelt, ob es sich um eine normale Datei (keine Gerätedatei, kein Verzeichnis usw.) handelt.
---


Oder gibts Gerätedateien nur auf Linux oder?


ps. Kann ich sicher sein, das ich über -f wirklich alle Verzeichnise bekomme?\n\n

<!--EDIT|master|1135075984-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
esskar
 2005-12-20 12:53
#61174 #61174
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=master,20.12.2005, 11:48]ABER!!!! -f ignoriert doch geräte-dateien...[/quote]
was ist denn das?

zur not:

Code: (dl )
1
2
3
sub is_dir {
return opendir my $dir, shift;
}
Crian
 2005-12-20 14:49
#61175 #61175
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
-r File is readable by effective uid/gid.
-w File is writable by effective uid/gid.
-x File is executable by effective uid/gid.
-o File is owned by effective uid.

-R File is readable by real uid/gid.
-W File is writable by real uid/gid.
-X File is executable by real uid/gid.
-O File is owned by real uid.

-e File exists.
-z File has zero size (is empty).
-s File has nonzero size (returns size in bytes).

-f File is a plain file.
-d File is a directory.
-l File is a symbolic link.
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-c File is a character special file.
-t Filehandle is opened to a tty.

-u File has setuid bit set.
-g File has setgid bit set.
-k File has sticky bit set.

-T File is an ASCII text file (heuristic guess).
-B File is a "binary" file (opposite of -T).

-M Script start time minus file modification time, in days.
-A Same for access time.
-C Same for inode change time (Unix, may differ for other platforms)\n\n

<!--EDIT|Crian|1135083021-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2005-12-20 15:18
#61176 #61176
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
-e liefert auch bei verzeichnissen eine 1
mich wundert nur, dass -f bei verzeichnissen bei master ebenfalls eine 1 liefert.
kann eigentlich nicht sein.
@master: perl-version + OS ?
Crian
 2005-12-20 15:37
#61177 #61177
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Natürlich liefert -e bei Verzeichnissen eine 1. Deshalb ist das ja abgerückt. Mit -e kann man feststellen, ob es am angegebenen Ort ein Ding mit dem angegebenen Namen gibt "everything is a file". Mit den Tests aus dem Block darunter kann man dann genauer herausfinden, was man da erwischt hat.

Ich wüsste nun allerdings auch gern, wieso -f bei masters Verzeichnissen eine 1 liefert.

Code: (dl )
1
2
3
4
Art         | -e | -f | -d |
------------|----|----|----|
Datei | 1 | 1 | 0 |
Verzeichnis | 1 | 0 | 1 |
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
murphy
 2005-12-20 16:45
#61178 #61178
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=master,20.12.2005, 11:48][...] Oder gibts Gerätedateien nur auf Linux oder? [...][/quote]
Gerätedateien gibt es meines Wissens nur in UNIX-artigen Systemen. Windows benutzt für so etwas extrem hässliche und unsaubere Dateinamensmagie.

Da ich aber nicht weiß, was du mit der Datei machen willst, kann ich dir auch nicht sagen, ob es sinnvoll ist, das auch auf Gerätedateien anzuwenden.
When C++ is your hammer, every problem looks like your thumb.
master
 2005-12-21 09:36
#61179 #61179
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Jungs...

So its...

-e  -> prüft nur ob etwas existiert..(Verz. und File!)

Habe ein keines Test-Skript geschreiben.
(ps. die Ordner sind auf einem Memorystick)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
$Datei = 'E:\Projekte\test\GUI\Loeschen';

print "\n-d = ";
if(-d $Datei) {  print 'DIR'; } else  {print 'FILE';   }

print "\n-e = ";
if(-e $Datei) {  print 'TRUE'; } else  {print 'FALSE';   }

print "\n-f = ";
if(-f $Datei) {  print 'FILE'; } else  {print 'DIR';   }



Ausgabe:
-d = DIR
-e = TRUE
-f = DIR


Also alles korrekt...
ich denk ich kann mich auf "-f" verlassen.... -d klappte komischerweise nicht immer :-(\n\n

<!--EDIT|master|1135150742-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
<< >> 9 Einträge, 1 Seite



View all threads created 2005-12-20 12:43.