[Cocoa]NSWorkspace使用示例

NSWorkspace使用示例

罗朝辉 (http://www.cnblogs.com/kesalin/)

本文遵循“署名-非商业用途-保持一致”创作公用协议


NSWorkspace 为应用程序提供如下服务:

1)打开,操作文件/设备,获取文件/设备信息
2)跟踪文件,设备以及数据库的变动
3)设置或获取文件的 Finder 信息
4)启动应用程序。


NSWorkspace 是个 Singleton 类,我们通过 sharedWorkspace 来访问它。比如下面的语句用 TextEdit 打开指定的文件:
[[NSWorkspace sharedWorkspace] openFile:@"/Myfiles/README" withApplication:@"TextEdit"];

下面的代码演示了大部分 workspace 的应用,运行效果图如下:

 

下面来看代码,代码都很简单的:

复制代码
- (IBAction) launchApplication:(id) sender
{
NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
//BOOL wasLaunched = [workspace launchApplication:@"Safari"];

// launch without activation
//
BOOL wasLaunched = [workspace launchAppWithBundleIdentifier: @"com.apple.Safari"
options: NSWorkspaceLaunchWithoutActivation
additionalEventParamDescriptor: NULL
launchIdentifier: nil];
if ( wasLaunched )
NSLog (@"Safari was launched");
else
NSLog (@"Safari was not launched");

NSArray * apps = [workspace valueForKeyPath:@"launchedApplications.NSApplicationName"];
self.launchedApplications = [NSString stringWithFormat:@"Launched Applications:\n%@", apps];
NSLog(@"Launched Applications:\n%@", apps);
}

- (IBAction) openPdfByDefault:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openURL: fileURL];
}

- (IBAction) openPdfBySafari:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace openFile:[fileURL path] withApplication:@"Safari"];
}

- (IBAction) selectFileInFinder:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];
[workspace selectFile:[fileURL path] inFileViewerRootedAtPath:nil];
}

- (IBAction) gatherFileInfo:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];

NSString * appName;
NSString * fileType;

[workspace getInfoForFile: [fileURL path]
application: &appName
type: &fileType];

BOOL removable = NO;
BOOL writeable = NO;
BOOL unmountable = NO;
NSString *description;
NSString *fileSystemType;

[workspace getFileSystemInfoForPath:[fileURL path]
isRemovable: &removable
isWritable: &writeable
isUnmountable: &unmountable
description: &description
type: &fileSystemType];

self.fileInfo = [NSString stringWithFormat:
@"AppName: %@\ntype: %@"
@"\nremoveable: %d\nwriteable: %d\nunmountable: %d"
@"\ndescription: %@\nfileSystemType: %@",
appName, fileType,
removable, writeable, unmountable,
description, fileSystemType];
NSLog (@" >> gather file info:\n%@", self.fileInfo);
}

- (IBAction) copyFileToDesktop:(id) sender
{
NSString * name = @"About Xcode and iOS SDK.pdf";
NSArray * files = [NSArray arrayWithObject: name];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];

[workspace performFileOperation: NSWorkspaceCopyOperation
source: @"/Developer/"
destination: @"/Users/tianyouhui/Desktop/"
files: files
tag: 0];
}

- (IBAction) moveFileToTrash:(id) sender
{
NSString * name = @"About Xcode and iOS SDK.pdf";
NSArray * files = [NSArray arrayWithObject: name];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];

[workspace performFileOperation: NSWorkspaceRecycleOperation
source: @"/Users/tianyouhui/Desktop/"
destination: @""
files: files
tag: 0];
}

- (IBAction) gatherIconOfFile:(id) sender
{
NSString * path = @"/Developer/About Xcode and iOS SDK.pdf";
NSURL * fileURL = [NSURL fileURLWithPath: path];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];

self.icon = [workspace iconForFile: [fileURL path]];
//NSString * path = [workspace fullPathForApplication:@"Safari"];
//self.xcodeIcon = [workspace iconForFile: path];

self.xcodeIcon = [workspace iconForFileType:@"xcodeproj"];
}

- (IBAction) openUrlBySafari:(id) sender
{
NSURL * url = [NSURL URLWithString:@"http://blog.csdn.net/kesalin/"];

NSWorkspace * workspace = [NSWorkspace sharedWorkspace];

[workspace openURL: url];
}
复制代码



 

posted @   飘飘白云  阅读(2240)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
本博客遵循 Creative Commons License “署名-非商业用途-保持一致”创作共用协议。 与我联系
点击右上角即可分享
微信分享提示