At the moment I'm using >

filename = FileNameJoin[{root = "F:\\somefolderpath", file = "somefile.extention"}];
If[! DirectoryQ[root], 
  Print[Style["Directory '" <> root <> "' does not exist!", {Red, Bold, Large}]]; Quit[]];
If[! FileExistsQ[filename], 
  Print[Style["File '" <> filename <> "' does not exist!", {Red, Bold, Large}]]; Quit[]];
(*Start using 'filename'*)

edit: Ended up using

SafeFile::usage = "Use instead of Import.";
SafeFile::nodir = "Directory `1` does not exist.";
SafeFile::nofile = "File `1` does not exist.";

Quitting kernel was actually what I needed.

  • $\begingroup$ Please paste the actual code instead of a screenshot. $\endgroup$ Apr 13 '12 at 22:01
  • $\begingroup$ The messages would usually be named SafeFile::nodir, and you don't need to define them in your function; they can go right next to the SafeFile::usage definition. $\endgroup$ Apr 13 '12 at 22:06

You might consider using Messages instead of Print. You should also consider using TrueQ if either root or filename might not be a string.

file::nodir = "Directory `1` does not exist.";
file::nofile = "File `1` does not exist.";

If[! TrueQ @ DirectoryQ @ root, Message[file::nodir, root]; Abort[]];
If[! TrueQ @ FileExistsQ @ filename, Message[file::nofile, filename]; Abort[]];

What you are doing seems pretty minimal already; the fact that MMA notation is very verbose is something that cannot be avoided. You could separate the whole check into a separate function and put that into an invisible initialization cell so it is out of the way.

As for not killing the kernel, just use Abort[] instead of Quit[].


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.