2016-08-26 2 views
0

私はこの方法でファイルをコピーし、ソースファイルを削除したファイルをコピーする過程で、また成功をコピーすることもできます。私はあなたが成功する理由を知りたいですか?このファイルは削除されましたが、ファイルストリームは存在しますか?私はファイルをコピーするためにfs.createReadStreamとパイプを使用しています。ソースファイルは削除されていますが、ファイルストリームは存在しますか?

var fs=require('fs'); 
var rOption={ 
    flags:"r", 
    encoding:null, 
    mode:0666 
} 

var wOption = { 
    flags: 'a', 
    encoding: null, 
    mode: 0666 
} 

var fileReadStream=fs.createReadStream('file1.rar',rOption); 
var fileWriteStream = fs.createWriteStream('file2.rar',wOption); 

fileReadStream.on('data',function(data){ 
    fileWriteStream.write(data); 
}); 

fileReadStream.on('error',function(err){ 
    console.log(err) 
}); 

fileReadStream.on('end',function(){ 
    console.log("readStream end"); 
    fileWriteStream.end(); 
}); 
+0

現在の動作は何ですか?直接の質問をして、どのように動作させるかがはっきりしていることを確認してください。 – hankide

+0

file1.rarがfile2.rarにコピーしていたとき、私はfile1.rarを削除しました。 'file2.rar'が作成されました。私はfile1.rarが削除されたので、そこからのストリームを知りたい。 – user5010266

答えて

0

この使用する:あなたは(LinuxやOS Xなど)UnixライクなOSを使用している場合、これは予想される動作です

var fs=require('fs'); 
var rOption={ 
    flags:"r", 
    encoding:null, 
    mode:0666 
} 

var wOption = { 
    flags: 'a', 
    encoding: null, 
    mode: 0666 
} 

var fileReadStream=fs.createReadStream('file1.rar',rOption); 
var fileWriteStream = fs.createWriteStream('file2.rar',wOption); 

fileReadStream.on('end', function() { 
    fs.unlink('file1.rar', function(){}); 
}); 

fileReadStream.pipe(fileWriteStream); 
+0

私の平均は、ファイルシステムからfile1.rarをコードではなく削除できる理由です。そして、ファイルを削除すると、コピープロセスは終了し、ローカルファイルは削除されます。そこからのストリームはどこですか? – user5010266

0

を:あなたは、ファイルを削除するとき、あなたは "単に" ですディレクトリエントリを削除します。

プロセス(ノードアプリケーション)にそのようなファイルへの参照(ストリーム)がある場合、実際のファイルの内容はそのプロセスで利用可能なままです。参照が閉じられるときだけ、内容は "削除"されます(ディスクスペースは利用可能であるとマークされます)。

この方法は、プロセスが停止すると自動的に削除される一時ファイルを作成するためにも使用されます。ファイルが作成されて開かれ、そのディレクトリエントリは削除されますが、ファイルが開いたままであれば、または書かれた。ファイルがクローズされると(プロセスが終了しても起こります)、ディスクスペースは再び使用可能にマークされます。

これはWindowsで動作するかどうかわかりません。

+0

ありがとう、私は窓で泳いでいます。この場合、 – user5010266

+0

@ user5010266が発生しますが、同じ原則がWindowsにも適用されるようです。 – robertklep

+0

そうではなく、Windowsファイルの下にロックされていません。私はそれを削除することができます。しかし、ストリームは存在するようです – user5010266

関連する問題