You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by "Schuster, Stephan (Wilken GmbH)" <st...@wilken.de> on 2009/01/12 14:15:57 UTC

[VFS] File names are NOT case sensitive on Windows

Hi together,

I just encountered the following problem with Commons VFS on Windows:

FileSystemManager fsManager = VFS.getManager();
FileObject fo1 = fsManager.resolveFile("c:\\test.txt"); // lower case
FileObject fo2 = fsManager.resolveFile("C:\\test.txt"); // upper case
System.out.println(fo1.equals(fo2)); // false but should be true




A while ago i was wondering why AbstractFileObject does not overwrite 
equals() or hashCode() but uses a simple object comparison (see 
http://www.mail-archive.com/user@commons.apache.org/msg01655.html).

Mario Ivankovits answered:

"The current VFS implementation (if you do not use anything else then 
the only-working SoftRefFilesCache) ensures that two resolveFile will 
return the same object if you ask for the same filename, thus, in terms 
of VFS there is nothing bad with the object comparison."

That's right, however, the caching mechanism uses a TreeMap hashing file 
systems by a so called FileSystemKey which encapsulates their root path 
as an implementation of FileName (on Windows: WindowsFileName). 
Comparing two such FileSystemKeys internally results in a simple String 
comparison where e.g. "c:" and "C:" are considered different. In the 
test case listed above, VFS will therefore create two instances of 
FileObject, one for "c:\\test.txt" and one for "C:\\test.txt". An object 
comparison between both obviously returns false even though it's the 
same file.


Since file names are not case sensitive on Windows, equals(), hashCode() 
and compareTo() of WindowsFileName should probably convert all paths to 
lower case before comparing them.


Any other ideas?


Regards,
Stephan


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [VFS] File names are NOT case sensitive on Windows

Posted by Ralph Goers <ra...@dslextreme.com>.
On Jan 12, 2009, at 5:15 AM, Schuster, Stephan (Wilken GmbH) wrote:

> Hi together,
>
> I just encountered the following problem with Commons VFS on Windows:
>
> FileSystemManager fsManager = VFS.getManager();
> FileObject fo1 = fsManager.resolveFile("c:\\test.txt"); // lower case
> FileObject fo2 = fsManager.resolveFile("C:\\test.txt"); // upper case
> System.out.println(fo1.equals(fo2)); // false but should be true
>
>
>
>
> A while ago i was wondering why AbstractFileObject does not  
> overwrite equals() or hashCode() but uses a simple object comparison  
> (see http://www.mail-archive.com/user@commons.apache.org/msg01655.html) 
> .
>
> Mario Ivankovits answered:
>
> "The current VFS implementation (if you do not use anything else  
> then the only-working SoftRefFilesCache) ensures that two  
> resolveFile will return the same object if you ask for the same  
> filename, thus, in terms of VFS there is nothing bad with the object  
> comparison."
>
> That's right, however, the caching mechanism uses a TreeMap hashing  
> file systems by a so called FileSystemKey which encapsulates their  
> root path as an implementation of FileName (on Windows:  
> WindowsFileName). Comparing two such FileSystemKeys internally  
> results in a simple String comparison where e.g. "c:" and "C:" are  
> considered different. In the test case listed above, VFS will  
> therefore create two instances of FileObject, one for "c:\\test.txt"  
> and one for "C:\\test.txt". An object comparison between both  
> obviously returns false even though it's the same file.
>
>
> Since file names are not case sensitive on Windows, equals(),  
> hashCode() and compareTo() of WindowsFileName should probably  
> convert all paths to lower case before comparing them.
>
>
> Any other ideas?

Please create an issue in Jira. If you would like to create a patch  
please feel free. ;-)

Ralph


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org