2015-11-04 181 views
0

我想创建一个简单的控制台应用程序,它将根据文件名比较两个文件并将结果输出到一个新文件中。FS不会创建文件

我的问题是,NodeJS拒绝创建一个新文件,如果它不存在,即使我手动创建它也不存在。

compare = (data) -> # data is being read from process.stdin 
    fname = "#{data}_compare.txt" 
    stdout.write "Attempting to compare #{data}" # stdout = process.stdout 
    fs.writeFileSync fname, 'A test.' 

中的NodeJS两种情况下返回Error: ENOENT, no such file or directory(当我想它创建的文件,以及当该文件已经存在了)。

我想要在运行应用程序的同一文件夹中创建文件,因此路径不应该是问题(并且确实在错误消息中是正确的)。

我也试图指定{flags: 'w'},但据我所知,这是默认值,所以它改变了注意。

我在Windows 10上运行,尝试在管理员下运行命令提示符,仍然没有。任何想法可能会造成这种情况?

+1

只是一个猜测,但它在我看来,数据,如果从标准输入读取,可能包含换行符。你可以输出'fname'并检查? –

+0

@asaddude它似乎它。现在我明白这可能会导致一个问题。 – ROAL

+0

@asaddude你应该发布这个答案。我尝试使用'data.substring(0,data.length - 2)'从data数据中移除最后两个字符('\ n'),现在正在正确创建文件。这完全没有让我想起。 – ROAL

回答

1

data变量是从标准输入读取,因此在结尾处包含一个换行符。这可能是导致非描述性ENOENT错误的原因。

您可以删除换行符(以及任何其他空格用户可能不小心进入)与data = data.trim()

这将是从1995年起的换行符substring更好的解决方案仅适用于Windows 2个字符,1个字符别处。

+0

使用'.trim()'而不是'.substring()'(尽管应用程序将在受控环境中运行,仅在Windows设备上运行)的好处。再次感谢! – ROAL

0

确保路径存在(不一定是文件本身,但文件夹结构),并且进程用户具有写入权限。

+0

路径存在,它是'.coffee'(和编译的'.js')文件所在的路径。我试着在我的普通用户帐户下运行它。鉴于我能够使用Windows资源管理器在那里创建文件,该流程也应该能够这样做。正如我所说,我也试图以管理员身份运行它。即使那样文件也无法创建。 – ROAL

0

ENOENT错误告诉您指定路径名的组件不存在 - 给定路径中找不到实体(文件或目录)。

确保你把“点”: './path/to/file'