Làm cách nào để xóa tất cả nội dung của thư mục mà không xóa thư mục? Tôi muốn về cơ bản có sản phẩm nào để trống một thư mục nào đó (và các quyền) còn nguyên vẹn.NSFileManager xóa nội dung của thư mục
Trả lời
Ví dụ: bằng cách sử dụng một Enumerator thư mục:
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:path];
NSString *file;
while (file = [enumerator nextObject]) {
NSError *error = nil;
BOOL result = [fileManager removeItemAtPath:[path stringByAppendingPathComponent:file] error:&error];
if (!result && error) {
NSLog(@"Error: %@", error);
}
}
Swift
let fileManager = NSFileManager.defaultManager()
let enumerator = fileManager.enumeratorAtURL(cacheURL, includingPropertiesForKeys: nil, options: nil, errorHandler: nil)
while let file = enumerator?.nextObject() as? String {
fileManager.removeItemAtURL(cacheURL.URLByAppendingPathComponent(file), error: nil)
}
Hãy thử điều này:
NSFileManager *manager = [NSFileManager defaultManager];
NSString *dirToEmpty = ... //directory to empty
NSError *error = nil;
NSArray *files = [manager contentsOfDirectoryAtPath:dirToEmpty
error:&error];
if(error) {
//deal with error and bail.
}
for(NSString *file in files) {
[manager removeItemAtPath:[dirToEmpty stringByAppendingPathComponent:file]
error:&error];
if(error) {
//an error occurred...
}
}
'contentsOfDirectoryAtPath :: 'không cung cấp cho bạn đường dẫn đầy đủ các nội dung. –
Không cần kiểm tra "." hoặc ".." vì 'contentsOfDirectoryAtPath: error' _filters_ chúng ra; từ tài liệu ** Tìm kiếm cạn và do đó không trả lại nội dung của bất kỳ thư mục con nào. Mảng trả về này không chứa các chuỗi cho thư mục hiện tại (“.”), Thư mục mẹ (“..”), hoặc các nhánh tài nguyên (bắt đầu bằng “._”) và không đi qua các liên kết tượng trưng. ** – petert
@petert Whoa , đây là câu trả lời rất cũ. Cảm ơn bạn về thông tin. –
Các tài liệu cho contentsOfDirectoryAtPath:error:
nói:
Việc tìm kiếm là nông cạn và do đó không trả lại các nội dung của bất kỳ thư mục con. Mảng trả về này không chứa các chuỗi cho thư mục hiện tại (“.”), Thư mục mẹ (“..”), hoặc các nhánh tài nguyên (bắt đầu bằng “._”) và không đi qua các liên kết tượng trưng.
Như vậy:
---(file != @"." && file != @"..")---
là không thích hợp.
Tại sao không xóa toàn bộ thư mục và tạo lại sau đó? Chỉ cần nhận các thuộc tính và quyền của tệp trước khi xóa nó và sau đó tạo lại nó với các thuộc tính giống nhau.
Tại sao bạn muốn xóa thư mục và gặp phải các sự cố có thể xảy ra (ví dụ: quyền) nếu bạn chỉ có thể xóa nội dung đó? –
Thường tốt hơn là quét một thư mục và xóa các tệp khỏi mã nguồn vì nó đáng tin cậy hơn nhiều để khôi phục và báo cáo lỗi. – petert
Câu trả lời của Georg Fritzsche cho Swift không hiệu quả đối với tôi. Thay vì đọc đối tượng được liệt kê dưới dạng Chuỗi, hãy đọc nó là NSURL.
let fileManager = NSFileManager.defaultManager()
let url = NSURL(string: "foo/bar")
let enumerator = fileManager.enumeratorAtURL(url, includingPropertiesForKeys: nil, options: nil, errorHandler: nil)
while let file = enumerator?.nextObject() as? NSURL {
fileManager.removeItemAtURL(file, error: nil)
}
Bạn có thể kéo dài tuổi NSFileManager
như thế này:
extension NSFileManager {
func clearFolderAtPath(path: String) -> Void {
for file in subpathsOfDirectoryAtPath(path, error: nil) as? [String] ?? [] {
self.removeItemAtPath(path.stringByAppendingPathComponent(file), error: nil)
}
}
}
Sau đó, bạn có thể xóa các thư mục như thế này: NSFileManager.defaultManager().clearFolderAtPath("the folder's path")
trong nhanh chóng 2.0:
if let enumerator = NSFileManager.defaultManager().enumeratorAtPath(dataPath) {
while let fileName = enumerator.nextObject() as? String {
do {
try NSFileManager.defaultManager().removeItemAtPath("\(dataPath)\(fileName)")
}
catch let e as NSError {
print(e)
}
catch {
print("error")
}
}
}
Swift 2.1.1:
public func deleteContentsOfFolder()
{
// folderURL
if let folderURL = self.URL()
{
// enumerator
if let enumerator = NSFileManager.defaultManager().enumeratorAtURL(folderURL, includingPropertiesForKeys: nil, options: [], errorHandler: nil)
{
// item
while let item = enumerator.nextObject()
{
// itemURL
if let itemURL = item as? NSURL
{
do
{
try NSFileManager.defaultManager().removeItemAtURL(itemURL)
}
catch let error as NSError
{
print("JBSFile Exception: Could not delete item within folder. \(error)")
}
catch
{
print("JBSFile Exception: Could not delete item within folder.")
}
}
}
}
}
}
Swift 3 nếu có ai cần nó cho một cắt/dán nhanh
let fileManager = FileManager.default
let fileUrls = fileManager.enumerator(at: folderUrl, includingPropertiesForKeys: nil)
while let fileUrl = fileUrls?.nextObject() {
do {
try fileManager.removeItem(at: fileUrl as! URL)
} catch {
print(error)
}
}
- 1. Xóa nội dung của thư mục có tập lệnh shell
- 2. Cách xóa nội dung của thư mục Documents (và không phải thư mục Documents)?
- 3. Sao chép mục/Xóa-mục nội dung con mà không có thư mục gốc?
- 4. Làm thế nào để xóa tất cả nội dung của một thư mục với Ruby-Rails?
- 5. PHP: Cách đơn giản nhất để xóa thư mục (bao gồm nội dung của nó)
- 6. .gitignore một nội dung thư mục
- 7. Nội dung thư mục trong Haskell
- 8. Sao chép thư mục (w/nội dung) từ nhóm vào thư mục Tài liệu - iOS
- 9. Cách thêm nội dung vào thư mục SVN mà không kiểm tra nội dung của nó?
- 10. yêu cầu tệp nội dung từ thư mục con của đường dẫn nội dung
- 11. Robocopy nội dung bản sao của thư mục hiện hành
- 12. Tạo biểu diễn văn bản của nội dung thư mục
- 13. sự khác biệt giữa nội dung của hai thư mục
- 14. Danh sách nội dung của thư mục (php)
- 15. Truy xuất nội dung của thư mục Dropbox công khai?
- 16. Giám sát nội dung của tệp/thư mục?
- 17. Làm thế nào để loại bỏ các nội dung trong thư mục Cache?
- 18. SVN kiểm tra nội dung của một thư mục, không phải thư mục chính nó
- 19. Danh sách các tệp trong thư mục nội dung và thư mục con của nó
- 20. Sao chép nội dung của một thư mục này sang một thư mục khác
- 21. NSFileManager không xóa tệp tồn tại
- 22. Cách xóa nội dung của một div
- 23. Di chuyển nội dung thư mục con vào thư mục mẹ trong python
- 24. Làm cách nào để xóa nội dung trong thư mục bằng tập lệnh bash?
- 25. Nội dung của thư viện tĩnh
- 26. Cách lặng lẽ xóa thư mục có nội dung trong PowerShell
- 27. Xóa hình ảnh khỏi thư mục ứng dụng trong iPhone
- 28. Xóa nội dung tệp android
- 29. Nội dung bảo mật trong thư mục Tài liệu
- 30. Linux có thể dọn sạch nội dung của tất cả các tệp trong một thư mục
Đừng quên kiểm tra xem 'removeItemAtPath:' có thực sự thất bại trước khi thử sử dụng đối tượng lỗi hay không. Ít nhất, bạn có thể báo cáo nhiều lỗi hơn bạn thực sự có. –
@Peter: Rất tiếc, cảm ơn. –
Có sự cố trong vòng lặp while, bạn không thể khai báo biến của bạn bên trong dấu ngoặc đơn !! – Psycho