Uploaded image for project: 'Commons VFS'
  1. Commons VFS
  2. VFS-239

File names are NOT case sensitive on Windows

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.0
    • 2.0
    • None
    • win xp

    Description

      Extracted from mailing list:

      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.

      Attachments

        Activity

          People

            Unassigned Unassigned
            stephanschuster Stephan Schuster
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: