|
Duplicate :
|
|
|
Duplicate :
|
|
|
Duplicate :
|
|
|
Duplicate :
|
|
|
Duplicate :
|
|
|
Relates :
|
|
|
Relates :
|
Name: boT120536 Date: 01/09/2001
------------
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)
Windows NT with an NTFS file system does not restrict the
total length of a path (unlike Windows 9x). You can create
a directory structure where the total path exceeds 255
characters. Unfortunately Java is unable to use any such file or
directory. The attached application illustrates this --- it attempts
to recurse through the structure. On encountering a file or directory
with path greater than 255 characters it will report that the object
is neither a file nor a directory. Any attempt to open such a file will also
fail.
To avoid this problem the native code should prepend \\?\ before any paths
which are longer than 255 characters when passing file names to the Windows
API. Actually you could always do this when the OS is NT.
7
To create a deep directory structure try this:
mkdir deep
cd deep
mkdir a
mkdir a\averylongnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
mkdir b
move a b\evenlongernnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
ren b a
mkdir b
move a b\evenlongernnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
ren b a
mkdir b
move a b\evenlongernnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
ren b a
repeat the last three lines as required
-------------------------------------
import java.io.File;
import java.io.IOException;
class RecurseFile
{
public static void main(String[] args)
{
for (int i=0; i<args.length; i++)
{
File f = new File(args[i]);
System.out.println("Scanning tree: "+f);
long size = sizeOf(f);
System.out.println("size="+size);
}
}
private static long sizeOf(File dir)
{
String[] names = dir.list();
if (names == null)
return 0;
long size=0;
for (int i=0; i<names.length; i++)
{
File f = new File(dir, names[i]);
if (f.getPath().length() > 255)
{
System.out.println("Long path: "+f);
}
if (f.isDirectory())
{
size += sizeOf(f);
}
else if (f.isFile())
{
size += f.length();
}
else
System.out.println("Neither file nor
directory: "+f);
}
return size;
}
}
(Review ID: 114827)
###@###.### 10/15/04 20:43 GMT
|