使用 FS 从数组创建文本文件

Creating text files from array, using FS

我创建了一个字符串数组并将它们放入一个名为 schoolsArray 的数组中。我希望能够使用 fs 为每所学校创建一个文本文件。

出于某种原因,我无法让它工作。问题似乎在于使用 schoolsArray[0] 中的值作为路径名中的字符串。请看看我的一系列测试。第一个代码片段一切正常,但我添加它只是为了帮助您理解我首先导入 'fs' 并创建一个目录。

更新 - 添加了每个请求的 schoolArray 创建

var fs = require('fs');

// Read all schools into array (read from text file)
const schoolFile  = "./assets/dispatch/state/schools/county_name.txt";
fileInput         = fs.readFileSync(schoolFile, "utf-8");
const schoolArray = fileInput.split("\n");

// Variable for chat logs directory
const chatDir = "./chat-logs";

// Create directory if it doesn't exist
if(!fs.existsSync(chatDir)){
    fs.mkdirSync(chatDir);
}

目录已创建,现在尝试创建一个文件尝试#1

var schoolTextFile = chatDir + "/" + schoolArray[0] + ".txt";
fs.writeFileSync(schoolTextFile, "");

Uncaught Error: ENOENT: no such file or directory, open 'C:\Users\PC\Desktop\Node_Webkit_Test\chat-logs\Test School Name.txt'
    at Object.fs.openSync (fs.js:653:18)
    at Object.fs.writeFileSync (fs.js:1300:33)

好的,但由于某些原因这不起作用。尝试 #2 - 我开始认为 schoolArray[0] 值没有被读取为字符串,所以我尝试了这个:

var schoolTextFile = chatDir + "/" + toString(schoolArray[0]) + ".txt";
fs.writeFileSync(schoolTextFile, "");

这里没有错误,但是输出的是一个未定义的对象:

尝试 #3 只是简单地尝试一个文本字符串,而不是使用我的数组中的值。这完全符合预期。

var schoolTextFile = chatDir + "/" + "some Text 1234" + ".txt";
fs.writeFileSync(schoolTextFile, "");

因此,问题被确定为与路径中输入的 schoolArray[0] 值有关。甚至测试都显得很愚蠢,但我还是这样做了...

var somestring = "some text 1234";

console.log(typeof somestring);
// The log says that this is a string.
console.log(typeof schoolArray[0]);
// The log says that this is a string.

那么,为什么一个字符串在这里工作,另一个导致路径问题?提前致谢!

你肯定在 schoolArray 中有一些禁止使用的字符。通常 \r。尝试

schoolArray = fileInput.split("\n").map( line => line.replace(/\r/g,''));