0

I keep getting the error 'Error: ENOENT: no such file or directory, open 't1.txt'' when I run the function starting in the top-level directory pictured below. I think it has to with 'fs.readFileSync()' attempting to read a file's contents from a directory different than the one fs is declared in, though I am not quite sure.

Picture of directory structure

/* the built-in Node.js 'fs' module is included in our program so we can work with the computer's file system */
const fs = require('fs');

// used to store the file contents of the files encountered 
const fileContents = {};

/* stores the duplicate files as subarrays within the array, where the first element of the subarray is the duplicate file, and the second element is the original */
let duplicateFiles = [];

const traverseFileSystem = function (currentPath) {
  // reads the contents of the current directory and returns them in an array 
  let files = fs.readdirSync(currentPath);
  // for-in loop is used to iterate over contents of directory 
  for (let i in files) {
    let currentFile = currentPath + '/' + files[i];
    // retrieves the stats of the current file and assigns them to a variable
    let stats = fs.statSync(currentFile);
    // it's determined if the 'currentFile' is actually a file
    if (stats.isFile()) {
      /* if the file's contents are in the 'fileContents' object, then a new file has been encountered */
      if(fileContents[fs.readFileSync(files[i])] === undefined) {
        // the file's contents are set as the key, and the file path as the value
        fileContents[fs.readFileSync(files[i])] = currentFile;
      }
      // otherwise, the file's contents already exist in the 'fileContents' object, which means a duplicate file has been found 
      else {
        duplicateFiles.push([fileContents[fs.readFileSync(files[i])], currentFile]);
      }
    }
    /* if the 'file' is actually a directory, traverseFileSystem() is called recursively on that directory */
    else if (stats.isDirectory()) {
      traverseFileSystem(currentFile);
    }
  }
  return duplicateFiles;
};

1 Answer 1

1

You have fs.readFileSync(files[i]) which should be fs.readFileSync(currentFile) based on your code. Haven't confirmed your logic, but this should solve the error you are currently getting.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.