title: Nodejs fs | Error: ENOTDIR: not a directory
body: <p>So I am using a third party project and there is the following code block:</p>
  
  <pre><code>// walk through /run and remove all filecontents, keeping 1 level directories.
  var root = '/run';
  
  if (fs.existsSync(root)) {
    fs.readdirSync(root).forEach(cleanFileOrDir);
  }
  </code></pre>
  
  <p>where <code>cleanFileOrDir</code> is:</p>
  
  <pre><code>function cleanFileOrDir(f) {
    var fPath = path.join(root, f);
    if (fs.statSync(fPath).isFile()) {
      // if its a file delete it right away
      rimraf.sync(fPath);
    } else {
      // remove its contents
      rimrafKidsSync(fPath);
    }
  }
  </code></pre>
  
  <p>I am receiving the following error:</p>
  
  <pre><code>fs.js:945
    return binding.readdir(pathModule._makeLong(path), options.encoding);
                   ^
  
  Error: ENOTDIR: not a directory, scandir '/run/acpid.socket'
      at Error (native)
      at Object.fs.readdirSync (fs.js:945:18)
      at rimrafKidsSync (/home/otis/Developer/project/dockworker/lib/controllers/dockCleaner.js:27:6)
      at cleanFileOrDir (/home/otis/Developer/project/dockworker/lib/controllers/dockCleaner.js:22:5)
      at Array.forEach (native)
      at Object.&lt;anonymous&gt; (/home/otis/Developer/project/dockworker/lib/controllers/dockCleaner.js:8:24)
      at Module._compile (module.js:541:32)
      at Object.Module._extensions..js (module.js:550:10)
      at Module.load (module.js:458:32)
      at tryModuleLoad (module.js:417:12)
  </code></pre>
  
  <p>And the contents of my <code>/run/</code> directory are:</p>
  
  <pre><code>acpid.socket   crond.pid          docker       irqbalance.pid  mlocate.daily.lock  pppconfig        snapd.socket  udev     wpa_supplicant
  agetty.reload  crond.reboot       docker.pid   lightdm         mount               resolvconf       sudo          udisks2  xtables.lock
  alsa           cups               docker.sock  lightdm.pid     network             rsyslogd.pid     systemd       user
  avahi-daemon   dbus               initctl      lock            NetworkManager      sendsigs.omit.d  thermald      utmp
  containerd     dhclient-wlo1.pid  initramfs    log             plymouth            shm              tmpfiles.d    uuidd
  </code></pre>
  
  <p>I think this may have been an issue introduced by <code>Nodejs v6</code> the file system may have changed?</p>
  
  <p><strong>Update</strong> I modified the <code>cleanFileOrDir</code> function to look like this:</p>
  
  <pre><code>function cleanFileOrDir(f) {
    var fPath = path.join(root, f);
    console.log(fPath);
    if (fs.statSync(fPath).isFile()) {
      // if its a file delete it right away
      console.log('Is file');
      rimraf.sync(fPath);
    } else {
      // remove its contents
      console.log('Is directory');
      rimrafKidsSync(fPath);
    }
  }
  </code></pre>
  
  <p>I now get the following output:</p>
  
  <pre><code>/run/NetworkManager
  Is directory
  /run/acpid.socket
  Is directory
  fs.js:945
  </code></pre>
  
  <p>So in short it is treating <code>/run/acpid.socket</code> as a directory, any idea's why this would be?</p>