2012-06-15 26 views
11

Điều này làm tôi thất vọng vài ngày nay. Tôi biết về chuyển hướng dòng tiêu chuẩn cho thiết bị NUL, nhưng đây không phải là trường hợp. node.js sử dụng CreateFileW dưới các liên kết fs native/libuv của nó.Làm thế nào tôi có thể ghi vào thiết bị NUL trong Windows từ node.js?

Thật không may sử dụng một cái gì đó như:

require('fs').writeFileSync('NUL', 'foo') 

tạo ra một tập tin NUL vào cwd có 3 byte.

Tôi đã thử viết thư cho \ Device \ Null, nhưng vì tôi khá nhiều đầu * nix nơi mọi thứ đều là một tệp, tôi không thực sự tìm được đường dẫn làm việc cho \ Device \ Null. Chẳng hạn như \\. \ Device \ Null mà ném ENOENT.

Bất kỳ ý tưởng nào về cách thực hiện công việc này trong Windows?

This dường như có liên quan, nhưng tôi không thể theo dõi toàn bộ luồng từ lib/fs.js đến uv/src/win/fs.c để kiểm tra xem đối số đường dẫn không bị một số loại tương đối độ phân giải đường dẫn tuyệt đối.

+1

Lưu ý rằng nếu nó sẽ hoạt động, nhưng hãy thử 'NUL:'. –

+0

Đã thử trước khi đăng câu hỏi. Không hoạt động. Ném một số loại truy cập bị từ chối lỗi. Không có máy Windows vào lúc này để cung cấp chi tiết cụ thể. – SaltwaterC

Trả lời

5

Đường dẫn hợp lệ tới NUL thiết bị là "\\\\.\\NUL", không phải NUL, vì vậy việc sử dụng là: fs.writeFileSync("\\\\.\\NUL", "foo"). Vấn đề này đã được nâng lên so với Node.js trên GitHub: https://github.com/nodejs/node-v0.x-archive/issues/9271

Kể từ NUL là một thiết bị, không phải là một tập tin, nó phải được truy cập thông qua namespace thiết bị - điều này đòi hỏi đặt \\.\ ở phần đầu (các dấu gạch chéo khác cho thoát) - xem https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247.aspx#Win32_Device_Namespaces.

Cũng có thư viện dev-null đơn giản trên NPM có thể được sử dụng với luồng: https://www.npmjs.com/package/dev-null (không phải với .writeFile mặc dù).

3

Có một giải pháp lâu dài, như tự viết mã. Nhưng bạn có thể lấy một ý tưởng từ đây https://github.com/hanshuebner/node-hid/blob/master/src/HID.cc và viết một trình bao bọc trên thư viện C.

+0

Thay vì truyền một phương thức bao bọc cho thiết bị NUL (phát hiện hệ điều hành và hành động tương ứng), tôi chỉ vá thư viện để không đính kèm bất kỳ trình nghe sự kiện dữ liệu/kết thúc nào nếu null được chuyển làm đối số. Tôi đoán đây là cách làm dễ dàng hơn thay vì để hệ điều hành loại bỏ dữ liệu. – SaltwaterC

+0

Tôi rất vui vì bạn đã tìm được giải pháp làm việc. Bạn có thể chia sẻ mã của mình với cộng đồng không? :) –

+0

Nó là một phần của [http-get] (https://github.com/SaltwaterC/http-get). – SaltwaterC

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