From: Murray Eisenberg on
An exchange reported in between DrMajorBob and Selwyn Hollis
culminated, in essence, in the code below for creating a saveable
palette with a button to back up the InputNotebook.

If the target directory for the backup (fixed in the code that creates
the palette) already exists, then each time I click the button, I get an
unwanted message

CreateDirectory::filex : ... already exists

in the Messages window.

What is the best way to modify the code so as avoid that message? I can
think of two methods:

(1) Include a separate test as to whether that directory already exists
and, if so, by-pass the CreateDirectory phase; or

(2) Somehow trap the CreateDirectory so as to eliminate the message.

For Method (1), how does one tell whether a directory exists? I don't
find a single function that does it. All I can see is to use first
FileExistsQ to see if there's some file with the target directory's name
and second, if the file exists, FileType to check that it's a directory.
That seems to be getting unduly complicated.

Method (2) in principle seems simpler, and perhaps wrapping Quiet around
the entire body of the Module (which is an extended If expression) would
do the trick. But this would also suppress other messages that one might
want to see, such as when the directory does not already exist but for
some reason cannot be created; or that the directory exists but for some
reason is not writable; etc.

Suggestions?

The code:

CreateDocument[PaletteNotebook[Button["Bare Bones Backup",
Module[{filename,thisnb=InputNotebook[]},
If[thisnb=!=$Failed,
CreateDirectory[
ToFileName[{"e:/backups","MmaBareBones"}]];
filename=
StringJoin[
StringReplace[(WindowTitle/.AbsoluteOptions[thisnb]),
s_~~".nb"->s],"_",
StringJoin[ToString/@ Round/@ Rest[Date[]]],".nb"];
Export[
ToFileName[{"e:/backups","MmaBareBones"},filename],
DeleteCases[NotebookGet[thisnb],Cell[_,"Output",___],
Infinity]]]]],
Saveable->True]]

--
Murray Eisenberg murray(a)math.umass.edu
Mathematics & Statistics Dept.
Lederle Graduate Research Tower phone 413 549-1020 (H)
University of Massachusetts 413 545-2859 (W)
710 North Pleasant Street fax 413 545-1801
Amherst, MA 01003-9305

From: Albert Retey on
Am 02.08.2010 13:03, schrieb Murray Eisenberg:
> An exchange reported in between DrMajorBob and Selwyn Hollis
> culminated, in essence, in the code below for creating a saveable
> palette with a button to back up the InputNotebook.
>
> If the target directory for the backup (fixed in the code that creates
> the palette) already exists, then each time I click the button, I get an
> unwanted message
>
> CreateDirectory::filex : ... already exists
>
> in the Messages window.
>
> What is the best way to modify the code so as avoid that message? I can
> think of two methods:
>
> (1) Include a separate test as to whether that directory already exists
> and, if so, by-pass the CreateDirectory phase; or
>
> (2) Somehow trap the CreateDirectory so as to eliminate the message.
>
> For Method (1), how does one tell whether a directory exists? I don't
> find a single function that does it. All I can see is to use first
> FileExistsQ to see if there's some file with the target directory's name
> and second, if the file exists, FileType to check that it's a directory.
> That seems to be getting unduly complicated.

I would just use FileType, the result can be Directory, File or None,
but you would just have to discriminate between None (create directory)
Directory (don't do anything) or everything else (issue warning):

Switch[FileType[dirname],
None,CreateDirectory[dirname],
Directory,Null,
_, Message[...];Abort[]
]

> Method (2) in principle seems simpler, and perhaps wrapping Quiet around
> the entire body of the Module (which is an extended If expression) would
> do the trick. But this would also suppress other messages that one might
> want to see, such as when the directory does not already exist but for
> some reason cannot be created; or that the directory exists but for some
> reason is not writable; etc.

Quiet accepts a second argument so you will see every message except the
ones mentioned in the second argument. This will only suppress the
CreateDirectory::filex-Messages:

Quiet[CreateDirectory[dirname],CreateDirectory::filex]

hth,

albert




From: Themis Matsoukas on
Running v.0.0 on a mac, there is no unwanted message. Successive backups are saved without complaint.

Perhaps the best solution is to switch to a mac :-)

Themis

From: David Reiss on
I think that the best way is to simply check to see if the directory
exists using FileType[dir]===Directory (pre version 7) or
DirectoryQ[dir] (version 7 or above).

(by the way, as you know, there is a backup facility in
http://scientificarts.com/worklife).

--David

On Aug 2, 7:03 am, Murray Eisenberg <mur...(a)math.umass.edu> wrote:
> An exchange reported in between DrMajorBob and Selwyn Hollis
> culminated, in essence, in the code below for creating a saveable
> palette with a button to back up the InputNotebook.
>
> If the target directory for the backup (fixed in the code that creates
> the palette) already exists, then each time I click the button, I get an
> unwanted message
>
> CreateDirectory::filex : ... already exists
>
> in the Messages window.
>
> What is the best way to modify the code so as avoid that message? I can
> think of two methods:
>
> (1) Include a separate test as to whether that directory already exists
> and, if so, by-pass the CreateDirectory phase; or
>
> (2) Somehow trap the CreateDirectory so as to eliminate the message.
>
> For Method (1), how does one tell whether a directory exists? I don't
> find a single function that does it. All I can see is to use first
> FileExistsQ to see if there's some file with the target directory's name
> and second, if the file exists, FileType to check that it's a directory.
> That seems to be getting unduly complicated.
>
> Method (2) in principle seems simpler, and perhaps wrapping Quiet around
> the entire body of the Module (which is an extended If expression) would
> do the trick. But this would also suppress other messages that one might
> want to see, such as when the directory does not already exist but for
> some reason cannot be created; or that the directory exists but for some
> reason is not writable; etc.
>
> Suggestions?
>
> The code:
>
> CreateDocument[PaletteNotebook[Button["Bare Bones Backup",
> Module[{filename,thisnb=InputNotebook[]},
> If[thisnb=!=$Failed,
> CreateDirectory[
> ToFileName[{"e:/backups","MmaBareBones"}]];
> filename=
> StringJoin[
> StringReplace[(WindowTitle/.AbsoluteOptions[thisn=
b]),
> s_~~".nb"->s],"_",
> StringJoin[ToString/@ Round/@ Rest[Date[]]],".nb"];
> Export[
> ToFileName[{"e:/backups","MmaBareBones"},filename],
> DeleteCases[NotebookGet[thisnb],Cell[_,"Output",___],
> Infinity]]]]],
> Saveable->True]]
>
> --
> Murray Eisenberg mur...(a)math.umas=
s.edu
> Mathematics & Statistics Dept.
> Lederle Graduate Research Tower phone 413 549-1020 (H)
> University of Massachusetts 413 545-2859 (=
W)
> 710 North Pleasant Street fax 413 545-1801
> Amherst, MA 01003-9305


From: David Annetts on
Hi Murray,

There is DirectoryQ ...

If[Not(a)DirectoryQ[target], CreateDirectory(a)target];

D.

On 2/08/2010 19:03, Murray Eisenberg wrote:
> An exchange reported in between DrMajorBob and Selwyn Hollis
> culminated, in essence, in the code below for creating a saveable
> palette with a button to back up the InputNotebook.
>
> If the target directory for the backup (fixed in the code that creates
> the palette) already exists, then each time I click the button, I get an
> unwanted message
>
> CreateDirectory::filex : ... already exists
>
> in the Messages window.
>
> What is the best way to modify the code so as avoid that message? I can
> think of two methods:
>
> (1) Include a separate test as to whether that directory already exists
> and, if so, by-pass the CreateDirectory phase; or
>
> (2) Somehow trap the CreateDirectory so as to eliminate the message.
>
> For Method (1), how does one tell whether a directory exists? I don't
> find a single function that does it. All I can see is to use first
> FileExistsQ to see if there's some file with the target directory's name
> and second, if the file exists, FileType to check that it's a directory.
> That seems to be getting unduly complicated.
>
> Method (2) in principle seems simpler, and perhaps wrapping Quiet around
> the entire body of the Module (which is an extended If expression) would
> do the trick. But this would also suppress other messages that one might
> want to see, such as when the directory does not already exist but for
> some reason cannot be created; or that the directory exists but for some
> reason is not writable; etc.
>
> Suggestions?
>
> The code:
>
> CreateDocument[PaletteNotebook[Button["Bare Bones Backup",
> Module[{filename,thisnb=InputNotebook[]},
> If[thisnb=!=$Failed,
> CreateDirectory[
> ToFileName[{"e:/backups","MmaBareBones"}]];
> filename=
> StringJoin[
> StringReplace[(WindowTitle/.AbsoluteOptions[thisnb]),
> s_~~".nb"->s],"_",
> StringJoin[ToString/@ Round/@ Rest[Date[]]],".nb"];
> Export[
> ToFileName[{"e:/backups","MmaBareBones"},filename],
> DeleteCases[NotebookGet[thisnb],Cell[_,"Output",___],
> Infinity]]]]],
> Saveable->True]]
>