2013-04-19 26 views
6

Tôi đã nhận thấy vấn đề lớn là gì đối với openSync, khi bạn mở tệp bằng openSync, bạn sẽ không nhận được bộ mô tả tệp. Bạn chỉ nhận được nó như là một đối số để gọi lại nếu bạn mở với cuộc gọi không đồng bộ. Vấn đề là bạn phải có bộ mô tả tập tin để đóng tập tin! Có những thứ khác mà một lập trình viên có thể muốn làm cho một tập tin mà bạn cần bộ mô tả tập tin cho là tốt. Có vẻ như thiếu sót đáng kể trong API fs cho node.js không cung cấp cách truy cập biến fd mà cuộc gọi trả về khi mở ở chế độ không đồng bộ nếu bạn mở bằng cách sử dụng các cuộc gọi đồng bộ. Điều đó về cơ bản sẽ làm cho mở đồng bộ unuseable cho hầu hết các ứng dụng. Tôi thực sự không muốn phải sử dụng tập tin async mở ra và đóng lại sau này trong sự phát triển của tôi nếu tôi có thể tránh nó, có cách nào để lấy biến fd mà tôi cần để đóng tệp thành công khi sử dụng đồng bộ mở?Cách lấy tệp mô tả trong node.js nếu bạn mở tệp bằng openSync

Trả lời

12

Bạn sẽ nhận được gì khác từ openFileSync ngoài bộ mô tả tệp?

var fs = require('fs') 
var path = require('path') 
var fd = fs.openSync(path.join(process.cwd(), 'log.txt'), 'a') 
fs.writeSync(fd, 'contents to append') 
setTimeout(function() { 
    console.log('closing file now') 
    fs.closeSync(fd) 
}, 10000) 

Chạy lsof /path/to/log.txt trong khi kịch bản nút trên đang chạy và chạy lsof /path/to/log.txt một lần nữa sau khi kịch bản được thực hiện cho thấy các tập tin đã được đóng lại một cách chính xác

Điều đó nói rằng những gì bạn đang cố gắng để thực hiện bằng cách mở tập tin? Có lẽ có một cách tốt hơn như phát trực tuyến cho tình huống cụ thể của bạn

+0

cảm ơn câu trả lời nhanh! Sử dụng ví dụ của bạn và bạn đã đúng, nó hoạt động như một sự quyến rũ. Điều đó có nghĩa là nó sẽ trả về fd sau openSync, API chỉ không nói rõ ràng và tôi không nghĩ thử nó trước khi đăng câu hỏi. Tôi chỉ đơn giản là cố gắng đăng nhập một số dữ liệu thời gian để kiểm tra trên hệ thống của mình, tôi là một anh chàng C/C++ đang cố gắng tìm ra node.js trên máy của tôi và các tệp quen thuộc với tôi, nhưng tôi sẽ kiểm tra luồng trên đề xuất của bạn để xem chúng có phù hợp hơn với tôi trong nút hay không. Cảm ơn một lần nữa! – Brian

+0

Không sao cả. Các tài liệu node.js là tốt đẹp cho hầu hết các phần. Đôi khi, mặc dù họ giả sử rất nhiều người đọc và hơi bị cắt ngắn một chút: – Noah

+1

gợi ý: '__dirname + '/ log.txt'' cũng hoạt động –

Các vấn đề liên quan