Re: Jigsaw on Macintosh

>Jeff Dripps writes:
> >
> > Problem #1: It appears that Jigsaw manages data files by first creating a
> > temporary file (with a .tmp extension), then after updating the file
> > contents, attempts to rename the file to the desired name. The problem is,
> > at least on macintosh, this fails to occur for some reason. After
> > exercising Jigsaw, I find various files scattered about, such as
> > realms.db.tmp, admin.db.tmp and many .jigidx.tmp files. It appears that
> > Jigsaw could not rename them for some reason (possibly because they are
> > open?). In any event, this does not appear to be due to a duplicate file
> > name, as in many cases there was no such file.
>File renaming is one (and the only) place that I had to change to make
>it work similarly on Unix and Windows. It moght be the case that it
>needs another fix on the mac. The best way to solve this problem would
>be to compile a simple program that uses the File.rename method, and
>see how it performs (eg instead of running your system rename, write a
>program that does File.rename and see how it goes). It might also be a
>Java-mac bug (?)
>This is the one I used on windows (from memroy)

I added a couple of newbie error checks to your suggested test code
(below), changed 'from.rename' to 'from.renameTo', (which is what I think
you meant) and ran it. Assuming that the source (from) file should be
present and the destination (to) file should not be, the output each time
was: 'rename "one" to "two" failed !' and I was never able to rename a
file. I tried specifying full paths, file name only, all to no avail.

Does this mean that the File rename method in the Java runtime on mac is
broken? Geez I hope not!

If so, could you provide a sample of just how this could be overcome? i.e.,
would I need to extend the File class in order to add a new ReNameTo
method, then recompile Jigsaw using the new renamew method?? Any help
                                                                sinc, -jeff


import java.io.*;

public  class Rename {
    public static void main(String args[]) {
        try {
            System.out.println("Running Rename...");
            File from = new File(args[0]);
            File to   = new File(args[1]);
            if (! from.exists() )
                System.out.println("from file does not exist!");
            if (! to.exists() )
                System.out.println("to file does not exist!");
            if ( ! from.renameTo(to) )
                System.out.println("rename "+from+" to "+to+" failed !");

        } catch (Exception ex) {
            System.out.println("Rename <from> <to>");