以下の内容はhttps://let.blog.jp/tag/fileより取得しました。


Windows ってファイルを開いてると消せないと思ってたけど
Windows だとファイルを開いたままにしてると そのファイルを消せないと思ってた
なにかのプロセスで開いたままになってて消せなくて そのプロセスを見つけて停止することってよくあるし

でも普通に消せるみたい
Node.js で stream で書き込み中にエクスプローラーからファイルを消してみる

const stream = require("fs").createWriteStream("foo.txt")

stream.on("error", err => console.log({ err }))

setInterval(() => {
stream.write(
Date.now() + "\n",
(err, result) => console.log({ err, result })
)
}, 1000)

↑で毎秒書き込むので適当なところでファイルを消す
例のエラーはなく 普通に消せる

消したあとに ファイルを開いたプロセスが書きこむとどうなるか気になったけど 何も起きないみたい
書き込みは成功扱いで特にエラーは起きない
書き込み時に新規にファイルが作られるわけではなく どこにも出力されない
Linux での扱いと同じみたい

ということは消せないエラーが出てくるものはわざわざ追加でロックするような処理をしてる?
言語によってはデフォルトの挙動がそうなってるのかも

Windows だと OS やファイルシステムの都合で開いてるファイルは消せないものだと思ってたけど できるんだったらこの動きをデフォルトにしてほしい
どこかで開いてるからってエラー出されても面倒なだけで このエラーを見るたび Linux のほうがこういうところは便利だな―と思ってるくらいなので
ファイル開くときのフラグのわかりやすい図
https://github.com/byrro/misc-public-files/blob/master/public/ExWNT-white-bg.png

あまり使わないから r,w,a 以外忘れてる

+ があると r+,w+,a+ 全部読み書きできるから 書き込み位置と今のファイルを消すかの違い

Node.js だとこれにまだ追加があって
w,a,w+,a+ に x 付きの wx,ax,wx+,ax+ がある
x があると ファイルが存在する場合はエラー

r+,a,a+ に s 付きの rs+,as,as+ がある
rs はないみたい
s 付きは synchronous mode
Node.js の Sync とは違って IO 処理の同期モードだから Sync 系関数にしないと JavaScript の処理は完了を待たずに次の処理に進む
ディスクへの書き込みが同期処理だから通常より書き込み完了は遅くなるはず
ドキュメントでもパフォーマンスに影響するから必要ない限り推奨しないって書かれてる



以上の内容はhttps://let.blog.jp/tag/fileより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14