2015-11-04 182 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'