johnsundell/files 這個檔案處理庫,封裝的挺好本文看一下其源**
磁碟上的分為兩種,檔案和資料夾
public enum locationkind
檔案和資料夾的共性是,他有乙個路徑,
操作他們,都要filemanager
將檔案和資料夾的共性,封裝為storage
增刪改查的具體實現,交給這個類
public final class storage
將檔案和資料夾,抽象為 location
通用的增刪改查方法,放在location
裡面。
location 分為兩種,使用列舉 locationkind 區分型別
具體資訊,記錄在storage
裡面
public protocol location: equatable, customstringconvertible
var storage: storage
init(storage: storage)
}
將檔案,封裝為 file
檔案的讀寫,放在這個結構體中
public struct file: location
}
將資料夾,封裝為folder
處理子資料夾,根目錄等
public struct folder: location
}
1, 例項化資料夾
location 協議有乙個擴充套件方法,
拿資料夾路徑去例項化
// 裡面呼叫 `folder ` 遵守 `location` 協議,實現的 `init(storage: storage)`
public extension location
}
2, 獲取檔案目錄
裡面呼叫storage
的建立子列表的方法
public extension folder
}
建立子列表的方法,實現
一環套一環,層層封裝,
呼叫了乙個定義在folder
裡面的類childsequence
private extension storage where locationtype == folder
}
folder
裡面的類childsequence
路徑資訊在folder
裡面,
有兩個可選的屬性,
isrecursive
, 要不要遞迴,檢視所有層次的資料夾,
includehidden
, 要不要檢視隱藏的檔案和資料夾
預設從上到下排序
struct childsequence: sequence
}
到底了,最後一層
有資料夾路徑,
有操作方式,要不要看裡面資料夾的資訊,要不要看隱藏的
剩下的,就好辦了
如果不用遞迴獲取,就比較簡單
loaditemnames()
方法中,獲取這一層的檔名
有乙個索引index
記錄,遍歷到了,換下乙個
struct childiterator: iteratorprotocol
// 遵守 iteratorprotocol 協議,需要實現 next() 方法
public mutating func next() -> child?
guard let child = nested.next() else
nestediterators[0] = nested
return child
}let name = itemnames[index]
index += 1
if !includehidden
}let childpath = folder.path + name.removingprefix("/")
let childstorage = try? storage(path: childpath, filemanager: filemanager)
let child = childstorage.map(child.init)
if isrecursive
}return child ?? next()
}private func loaditemnames() -> [string]
}
mac 訪達中,重複檔案命名方式是,
擴充套件前,檔名後 + (1)
預設排序,重複檔案在前面,原檔案在後面
找到重複檔案,使用乙個指標儲存var current: file? = nil
再看後乙個檔案
let path = "\(nshomedirectory())/downloads"
let folder = try folder(path: path)
var current: file? = nil
for file in folder.files catch
print("----\n")
}current = nil
}if file.name.contains("(1")
}
庫原始碼檔案
庫原始碼檔案是不能被直接執行的原始碼檔案,它僅用於存放程式實體,這些程式實體可以被其他 使用 遵從你go語言規範 這裡的其他 是指與被使用的程式實體在同乙個原始碼檔案內,也可以在其他原始碼檔案,甚至其他 中。程式實體是變數 常量 函式 結構體和介面的統稱。必須先宣告程式實體,然後再去使用,程式實體的...
sigslot庫原始碼分析
言歸正傳,sigslot是乙個用標準c 語法實現的訊號與槽機制的函式庫,型別和執行緒安全。提到訊號與槽機制,恐怕最容易想到的就是大名鼎鼎的qt所支援的物件之間通訊的模式吧。不過這裡的訊號與槽雖然在概念上等價與qt所實現的訊號與槽,但是採用的僅僅是標準c 語法,不像qt採用了擴充套件c 語言的方式 q...
Volley原始碼分析 請求處理
總結 本篇分析分析volley如何生成請求,如何處理請求,以及請求如何返回。從分析中學習再做元件時如何處理請求。生產者 消費者模型描述的是共享的緩衝區的兩類執行緒,一類是新增訊息的生產者,一類是處理訊息的消費者。而基本涉及到的多執行緒處理的均使用這個模型。比如glide,比如這邊文件分析的volle...