Question or problem in the Swift programming language:
I want to be able to select a folder and show its contents in the Finder. I have managed to select the folder itself and select a file within the folder. But I don’t know how to show the contents of an empty folder.
e.g.
Folder A/Folder B
I want to display the contents of folder Folder B (which could be empty).
I have written the following code:
func showFolder(fileName : String) { var dataPath = homeDirectory.stringByAppendingPathComponent(fileName) var urlPath = NSURL(fileURLWithPath: dataPath) var selectedURLs = [urlPath!] NSWorkspace.sharedWorkspace().activateFileViewerSelectingURLs(selectedURLs) }
This only opens Folder A with Folder B highlighted. This is very close, but not quite right.
I need to be able to open Folder B with nothing highlighted. I’m obviously using the wrong command.
How to solve the problem:
Solution 1:
Use the selectFile
method and pass nil
as first argument and the path to the folder to be shown as second argument.
NSWorkspace.shared.selectFile(nil, inFileViewerRootedAtPath: "/Users/")
Solution 2:
2020 | SWIFT 5.1:
func showInFinder(url: URL?) { guard let url = url else { return } if url.isDirectory { NSWorkspace.shared.selectFile(nil, inFileViewerRootedAtPath: url.path) } else { showInFinderAndSelectLastComponent(of: url) } } func showInFinderAndSelectLastComponent(of url: URL) { NSWorkspace.shared.activateFileViewerSelecting([url]) }
-
If you put folder’s url – it will show in Finder content of the folder.
-
If you put file’s url – it will open in Finder file’s parent and select file there.
-
Will do nothing in case url is nil
-
Will do nothing in case file/path does not exist
Solution 3:
Swift 2.1 code to Launch OS X Finder
Use the selectFile
or activateFileViewerSelectingURLs
to select files.
Select 1 item in finder with path YOUR_PATH_STRING
NSWorkspace.sharedWorkspace().selectFile(YOUR_PATH_STRING, inFileViewerRootedAtPath: "")
The second param use empty string, if you specify an empty string “” for this parameter, the file is selected in the main viewer.
If you want to select 1 or more files use activateFileViewerSelectingURLs(_ fileURLs: [NSURL])
To select one file
NSWorkspace.sharedWorkspace().activateFileViewerSelectingURLs([NSURL].init(arrayLiteral: NSURL.init(fileURLWithPath: YOUR_PATH_STRING)))
To select multiple files
let urls : [NSURL] = [NSURL.init(fileURLWithPath: "/Users/USER_NAME/Pictures"), NSURL.init(fileURLWithPath: "/Users/USER_NAME/Music")]
If you provide item that are not in the same folder more windows selecting the specified files are open.
let urls : [NSURL] = [NSURL.init(fileURLWithPath: "/Users/USER_NAME/Pictures"), NSURL.init(fileURLWithPath: "/Users/USER_NAME/Music"), NSURL.init(fileURLWithPath: "/Users")]