2017-06-18 55 views
0

在Windows上,路徑不區分大小寫,在Linux上它們區分大小寫。如何確保兩個路徑不引用節點中的同一文件夾

我有一個文件服務器提供文件,這很好,因爲它將基於使用的操作系統提供服務。但是我跟蹤了某些路徑(包含特定文件的所有文件夾路徑),併爲這些路徑中的每一個加載類的新實例。但我的問題是,如果有人使用的是不區分大小寫的操作系統,它會爲相同的路徑加載兩個實例,這是一個否定的例子。但我不想僅比較toLowerCase(),因爲它們可能位於區分大小寫的文件系統上。

有沒有辦法使用文件夾統計信息來檢查我是否有相同的文件夾?或者以其他方式?

+0

如果還沒有爲不區分大小寫的文件系統創建類,那麼使用返回對現有類或新類的引用的策略如何?對於區分大小寫的文件系統,您始終可以創建一個新類。 –

+1

您在這裏只有兩個選擇:1)拒絕支持僅在大小寫不同的情況下才會有所不同的名稱,然後您可以使用小寫進行所有比較,2)檢測操作系統是否區分大小寫或不是,只對不區分大小寫的文件系統以小寫進行所有比較。選一個。您可以在服務器啓動時進行一次大小寫敏感測試以瞭解。 – jfriend00

+0

據我所知,nodejs不提供一些通用文件ID,您可以在兩個打開的文件之間進行比較以查看它們是否相同。您可以打開第一個文件進行獨佔訪問,隨後嘗試打開相同的文件將失敗,並顯示相應的錯誤以表明它已被使用。 – jfriend00

回答

0

您可以使用fs.stat獲得https://nodejs.org/api/fs.html#fs_class_fs_stats

對於一個普通文件util.inspect(統計)將返回非常類似這樣的字符串:

Stats { 
dev: 2114, 
ino: 48064969, 
mode: 33188, 
nlink: 1, 
uid: 85, 
gid: 100, 
rdev: 0, 
size: 527, 
blksize: 4096, 
blocks: 8, 
atimeMs: 1318289051000.1, 
mtimeMs: 1318289051000.1, 
ctimeMs: 1318289051000.1, 
birthtimeMs: 1318289051000.1, 
atime: Mon, 10 Oct 2011 23:24:11 GMT, 
mtime: Mon, 10 Oct 2011 23:24:11 GMT, 
ctime: Mon, 10 Oct 2011 23:24:11 GMT, 
birthtime: Mon, 10 Oct 2011 23:24:11 GMT } 

相信ino是你的inode號碼,其中應爲對於您正在討論的磁盤分區而言是唯一的。如果路徑指示分區,那麼對於特定的路徑你應該是好的。我想如果你想處理符號鏈接和其他文件系統的好東西,這可能會很有趣。

相關問題