Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FileTest und maximale Länge des Dateinamen [erledigt]
BeitragVerfasst: 23 Jun 2006, 14:39 
Offline
ri

Registriert: 23 Feb 2004, 14:59
Beiträge: 741
Wohnort: Esslingen
Hallo,

kann es sein das FileTest eine maximale Länge von 255 Zeichen (oder 256) für den Dateinamen erlaubt?

Ich habe gerade einen merkwürdigen Abbruch in einem Programm und konnte es mit dem folgenden Fragment als Minimalbeispiel reproduzieren:


1
2
3
4
5
Dir["#{path}/*"].each{|f|
puts "#{f.size}\t#{f.inspect}"
puts FileTest.exist?(f)
puts FileTest.size(f)
}

Das Ergebis ist bei hinreichend langem "path":


1
2
3
266        "...ein langer Pfadname"
false
test.rb:10:in `size': No such file or directory - "...der lange Filename" (Errno::ENOENT)

Erst findet Dir eine Datei und FileTest sagt dann, es gibt sie nicht.

OS: Windowx XP

Ich habe bei Google zwar ein paar Treffer zu Ruby MAX_FILENAME u.ä. aber konnte keine Bestätigung für meinen Verdacht finden.


Zuletzt geändert von knut am 23 Jun 2006, 15:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 23 Jun 2006, 15:25 
Offline
Interpreter
Benutzeravatar

Registriert: 15 Mär 2005, 19:26
Beiträge: 5874
Wohnort: Karlsruhe
Könnte es sein, dass das an Windows liegt? - Ich habe hier auf dem Notebook ein W2K am laufen - und - auf dem Desktop ein Verzeichnis, welches ich nicht mehr löschen kann. Da waren/sind Dateien drin, die teilweise einen irrsinnig langen Dateinamen haben/hatten. Das System hat da echte Schwierigkeiten.

_________________
WoNáDo.set_state!(:active)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 23 Jun 2006, 15:30 
Offline
ri
Benutzeravatar

Registriert: 04 Okt 2005, 10:42
Beiträge: 723
Wohnort: Wien
Ich kann bestätigen, dass Windows (auch XP) keinen Pfad länger als 255 Zeichen verwalten kann (hatte da auch mal Probleme)...

http://support.microsoft.com/default.as ... us;Q148754

Das lustige daran ist, dass das anscheinend schon seit Ewigkeiten so ist wie man sieht.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 23 Jun 2006, 15:45 
Offline
ri

Registriert: 23 Feb 2004, 14:59
Beiträge: 741
Wohnort: Esslingen
Scheint wirklich an Windows zu liegen.

Ist doch beruhigend wenn man sagen kann "Mein Programm tut, nur das Betriebssystem hat so seine Probleme".

Danke für die Hinweise.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 23 Jun 2006, 15:55 
Offline
Interpreter
Benutzeravatar

Registriert: 15 Mär 2005, 19:26
Beiträge: 5874
Wohnort: Karlsruhe
Gekko hat geschrieben:
p(proc{|f|f[proc{|x|x+1}][0]}[proc{|o|proc{|m|proc{|a|m[m[a[o][o]][a[a[o][o]][o]]][a[m[a[o][o]][a[o][a[o][o]]]][o]]}}}[proc{|f|proc{|x|f[x]}}][proc{|f|proc{|g|proc{|x|f[g[x]]}}}][proc{|f|proc{|g|lambda{|h|proc{|x|f[h][g[h][x]]}}}}]])

Wie man sieht, hat der Mainframe Erde also doch noch die Frage zur Antwort gefunden :wink:

_________________
WoNáDo.set_state!(:active)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 00:36 
Offline
Interpreter
Benutzeravatar

Registriert: 02 Jan 2005, 20:15
Beiträge: 1326
Zitat:
Ist doch beruhigend wenn man sagen kann "Mein Programm tut, nur das Betriebssystem hat so seine Probleme".


Irgendwie schon, weil wenn dann dein Programm in Ruby geschrieben ist, und Ruby keine Macken macht, aber Windows, dann kann man doch den Schluss ziehen, das Ruby besser als Windows ist - was die "Intelligenz" im Design angeht. :>

_________________
freenode.net, #ruby-de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 00:53 
Offline
Interpreter
Benutzeravatar

Registriert: 05 Jun 2005, 01:54
Beiträge: 3225
Nur so nebenbei, ich hab mal im Source nachgeschaut, und Ruby legt als max. Pfadlaenge 1024 fest, falls der Compiler bzw. die Stdlib nicht was anderes vorgeben:

1
2
3
#ifndef MAXPATHLEN
# define MAXPATHLEN 1024
#endif
(file.c:38 und dln.c:64)

_________________


1
2
3
alias L lambda
p L{|y|L{|f|y[L{|x|f[f][x]}]}[L{|f|y[L{|x|f[f][x]}]}]}[L{|z|L{|l|l.empty?? 0:1+z[l.drop(1)]}}][%w<a b c d e f g h i j>]
#=>10


Nuclear Powered Soup | Nuclear Powered Blog


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 13:35 
Offline
Geselle

Registriert: 22 Feb 2005, 13:38
Beiträge: 129
Wohnort: Berlin, Lyon, Europa und Welt
Nur zur Aufklärung:

Die maximale Zeichenlänge eines Pfades in Windows (bis XP!) ist mit 256 Zeichen hartcodiert. Unter NTFS gilt das zwar rein theoretisch nicht mehr, allerdings verwenden fast alle Programme (auch Windows-interne, wie z.B. der Explorer) noch diese Restriktion.

Auf diese Weise kann es auch zu dem äußerst ärgerlichen Phänomen kommen, dass durch ein obskures Programm eine Datei mit zu langem Dateinamen erstellt wird, die sich dann partout nicht löschen lässt (zumindest nicht über Windows-eigene Tools).

Das Verhalten ist also mehr oder weniger "by design".

Edit: Uh, ich hatte Gekkos Antwort überlesen.

_________________



self.vote :berlingruen
· http://gruene-berlin.de/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 14:09 
Offline
Interpreter
Benutzeravatar

Registriert: 15 Mär 2005, 19:26
Beiträge: 5874
Wohnort: Karlsruhe
Konrad L. M. Rudolph hat geschrieben:
Auf diese Weise kann es auch zu dem äußerst ärgerlichen Phänomen kommen, dass durch ein obskures Programm eine Datei mit zu langem Dateinamen erstellt wird, die sich dann partout nicht löschen lässt (zumindest nicht über Windows-eigene Tools).

Da ich genau dieses nette Phänomen habe (s.o.) eine Frage: Gibt es denn irgendwo ein (bitte Freeware irgendeiner Art) Tool, welches hilft (W2K-SP4)?

_________________
WoNáDo.set_state!(:active)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 14:59 
Offline
Geselle

Registriert: 22 Feb 2005, 13:38
Beiträge: 129
Wohnort: Berlin, Lyon, Europa und Welt
WoNáDo hat geschrieben:
Gibt es denn irgendwo ein (bitte Freeware irgendeiner Art) Tool, welches hilft (W2K-SP4)?

Ehrlich gesagt, keine Ahnung.

Es müsste möglich sein, mit den aktuellen (also den nicht-deprecated-) Funktionen der WinAPI auch längere Pfade zu lesen, wenn man vorher die symbolische MAX_PATH-Konstante anpasst.

Wenn ich mich richtig erinnere, kann der Dateisystem-Wrapper des .NET-Frameworks auch mit längeren Dateinamen umgehen.

_________________



self.vote :berlingruen
· http://gruene-berlin.de/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 15:11 
Offline
Geselle

Registriert: 22 Feb 2005, 13:38
Beiträge: 129
Wohnort: Berlin, Lyon, Europa und Welt
Zu meiner obigen Antwort:

Ich bin mir nicht ganz sicher, ob das tatsächlich so klappt. Allerdings habe ich gelesen, dass NTFS standardmäßig (se sei denn, man schaltete es über "fsutil behaviour" aus) 8.3-Dateinamen generiert. D.h. wenn man den kurzen Dateinamen zur Adressierung verwendet, sollte man es schaffen, solche über-langen Dateien zu löschen.

_________________



self.vote :berlingruen
· http://gruene-berlin.de/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 24 Jun 2006, 21:47 
Offline
Rubyist
Benutzeravatar

Registriert: 20 Jan 2006, 20:37
Beiträge: 309
Wohnort: @~
Hi.

Wenn ich das mal anmerken darf:
Hier (Debian GNU Linux auf einer Ext3-Partition) lässt sich eine Datei auch nur mit maximal 255 Zeichen benennen. Wenn man es dennoch versucht (mit mv) bekommt man einen Error: Der Dateiname sei zu lang und nichts passiert. Ruby kanns natürlich auch nicht.
Auch hier ist Ruby also nicht schuld.

_________________
Ubuntu 7.04 Feisty Fawn



"I like Ruby!".split("").each{|c|print c;$>.flush;sleep 0.05}


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 25 Jun 2006, 11:08 
Offline
Geselle
Benutzeravatar

Registriert: 10 Okt 2004, 10:58
Beiträge: 143
Wohnort: Eckental
cui hat geschrieben:
Hi.

Wenn ich das mal anmerken darf:
Hier (Debian GNU Linux auf einer Ext3-Partition) lässt sich eine Datei auch nur mit maximal 255 Zeichen benennen. Wenn man es dennoch versucht (mit mv) bekommt man einen Error: Der Dateiname sei zu lang und nichts passiert. Ruby kanns natürlich auch nicht.
Auch hier ist Ruby also nicht schuld.


Der Unterschied ist aber, das bei ext3, wie auch bei reiserfs, jeder der Dateinamen in Pfad darf 254 Zeichen besitzten darf. Bei Windows kann der komplette Pfad 254 Zeichen nicht überschreiten. Da ist ein kleiner Unterschied. Deshalb hat zum Beispiel das SCM arch Probleme unter Windows, da es extremlange Pfadangaben verwendet.

_________________
hakuna matata


_="_=%c%s%c;printf _,34,_,34";printf _,34,_,34


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: