2012-01-18 25 views
11

Tôi đang lặp lại một thư mục tệp và đã tự hỏi liệu có thể kiểm tra xem tệp có bị ẩn hay không. Hiện tại, tôi chỉ kiểm tra xem tệp có bắt đầu bằng '.' hay không. Điều này làm việc trong Mac (và Linux, có thể), nhưng, tôi tự hỏi làm thế nào tôi sẽ làm điều đó trên Windows? Ngoài ra, liệu thời gian có thể ẩn các tập tin trong tất cả các hương vị của Linux?Nodejs - Kiểm tra các tệp ẩn

Cảm ơn!

Code:

var fs = require('fs'); 
fs.readdir('/path', function(err, list) { 
    list.forEach(function(filename){ 
     var isHidden = /^\./.test(filename); 
     // etc ... 
    }); 
}); 

Trả lời

6

Đã làm một số thử nghiệm nhanh chóng sử dụng nút 0.6.x trên Windows 7. Quá trình cài đặt là một thư mục chứa 1 thư mục, 1 bảo vệ, 1 thành viên ẩn và 1 tập tin mà không thuộc tính đặc biệt.

tôi looped thư mục này và lấy số liệu thống kê cho các mục (sử dụng fs.stat (đường dẫn, callback)), đây là những kết quả:

testfolder 
fs.Stats.mode: 16895 

test_hidden.txt 
fs.Stats.mode: 33206 

test_norm.txt 
fs.Stats.mode: 33206 

test_prot.txt 
fs.Stats.mode: 33060 

Như bạn có thể thấy, người ta có thể khác nhau giữa các tệp được bảo vệ và ẩn/bình thường thông qua chế độ, nhưng thuộc tính ẩn thực sự là thuộc tính thực và không liên quan gì đến chế độ tệp.

Để xác định một cách đáng tin cậy các tệp ẩn trên Windows, nhóm node.js sẽ phải triển khai API GetFileAttributes() trên cửa sổ (như được thực hiện bởi C++ hoặc C#). AFAIK, đây không phải là trong các đường ống (ít nhất tôi không tìm thấy gì sau khi một số googling nhanh chóng).

Đối với câu hỏi của bạn liên quan đến các tệp bị ẩn trong tất cả các hương vị của unix khi bắt đầu bởi một khoảng thời gian: tôi đã không đi qua một phân phối mà điều này không hoạt động, do đó, từ pov của tôi: có.

+0

Thử nghiệm với tệp và thư mục trên máy tính để bàn Windows của tôi. Bất kể kết hợp thuộc tính tiêu chuẩn nào tôi đã áp dụng, tất cả các tệp đều có chế độ 33060 và tất cả các thư mục đều có chế độ 16822. Kiểm tra http://stackoverflow.com/questions/13440589/retrieve-file-attributes-from-windows -cmd cho một giải pháp bằng cách sử dụng một kịch bản máy chủ. –

+1

Dựa trên liên kết trên của tôi, tôi đã viết một mô-đun để xử lý các tệp ẩn đơn giản: https://www.npmjs.org/package/hidefile –

14

Cụm từ thông dụng để phát hiện có hiệu quả các tệp và đường dẫn thư mục ẩn trong Unix sẽ phức tạp hơn một chút do khả năng tồn tại của chúng trong chuỗi đường dẫn dài.

Những điều sau đây sẽ cố gắng xử lý như cũ.

/** 
* Checks whether a path starts with or contains a hidden file or a folder. 
* @param {string} source - The path of the file that needs to be validated. 
* returns {boolean} - `true` if the source is blacklisted and otherwise `false`. 
*/ 
var isUnixHiddenPath = function (path) { 
    return (/(^|\/)\.[^\/\.]/g).test(path); 
}; 
+1

Không hoạt động cho '(/ (^ |. \ /) \. + [^\/\.]/g) .test ('/. DS_Store'); ' – Izhaki

+1

@Izhaki - cập nhật regex. cảm ơn vì đã chỉ ra. –

+0

Tệp ẩn có được định nghĩa đơn giản là bắt đầu bằng dấu chấm không? –

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