2 Replies Latest reply: Jul 27, 2012 11:45 AM by Adam Cameron. RSS

    How do I know if this variable is a file handle?

    Adam Cameron. Community Member

      G'day

      (This has also been posted on StackOverflow)

      Say I have this code:

      function doFileStuff(){
         
      var file = "";
         
      try {
              file
      = fileOpen(filePath);
             
      // do stuff with file
         
      }
         
      finally {
              fileClose
      (file);
         
      }
      }

      If the fileOpen() process fails, the fileClose() call will error. What I need to do is this sort of thing (pseudocode):

      if (isFile(file)){
          fileClose
      (file);
      }

      I know I can test if file is an empty string still, and this works for me here, but it's not testing what I should be testing: whether file is a file handle. I can check the object's Java class, but this again sounds a bit hacky to me, and there should be a CFML way of doing it.

      There should be something like just isFile(), shouldn't there? I can't find anything like this in the docs.

      Any thoughts / tips? I have gone into more depth in my investigations on my blog. it's too wordy for here.

      Cheers for any help.

       

      --

      Adam

        • 1. Re: How do I know if this variable is a file handle?
          WolfShade Community Member

          Since "file = fileOpen(filePath)", can't you just remove the "file = ''" and check to see "if file" in the finally part?

           

          ^_^

          • 2. Re: How do I know if this variable is a file handle?
            Adam Cameron. Community Member

            That would just defer the issue.. fileOpen() doesn't return a boolean, so I can't go:

             

            if (fileOpen(filePath)){

                 fileClose(file);

            }

             

            fileOpen() returns a file object; or nothing if it fails.  The whole thing is to identify whether it's a file.  That's the question.

             

            As per my original, it's dead easy to work around, provided one leverages known side effects of the situation (original variable state; that if it's a file it exposes some public properties; that one can doa  getClass() on it via Java, etc), but one shouldn't have to work around something as fundamental as this.  So I was wondering if I had missed something.

             

            Seemingly not (based on feedback I've had from various quarters).

             

            --

            Adam