Mac:打开一个目录

1, 获得一个打开窗口对象

NSOpenPanel *oPanel = [NSOpenPanel openPanel]; //快捷建立方式不用释放, 我还记得, 你呢?

2, 设置这个对象的参数

	[oPanel setCanChooseDirectories:YES]; //可以打开目录
	[oPanel setCanChooseFiles:NO]; //不能打开文件(我需要处理一个目录内的所有文件)
	[oPanel setDirectory:NSHomeDirectory()]; //起始目录为Home

3, 处理得到的数据

	if ([oPanel runModal] == NSOKButton) {  //如果用户点OK
		NSLog([[[oPanel URLs] objectAtIndex:0] absoluteString]); 
		//我在console输出这个目录的地址
	}

4, 结果

[Switching to process 3330]
Running…
2010-06-17 22:49:02.583 [3330:a0f] file://localhost/Users/kingmtn/Music/

5, 简单的界面

只需要一个NSButton,并且将这个NSButton的缺省行为链接到我的对象方法-(IBAction)openDirectoryButtonClick:(id)sender上就可以了

*这是我XML2HTML工程的第一部分

7 Comments

  1. zykhbl 说:

    我想问一下,iphone有没有这种弹窗

  2. admin 说:

    iphone不能直接打开/关闭文件, 所以没有…

    不过你可以自己写阿~~
    如果只是string文件, 那也不过是[NSString stringWithContentsOfFile:< #(NSString *)path#> encoding:< #(NSStringEncoding)enc#> error:< #(NSError **)error#>].
    如果是raw data, 就是[NSData dataWithContentsOfFile:< #(NSString *)path#> options:< #(NSDataReadingOptions)readOptionsMask#> error:< #(NSError **)errorPtr#>]

  3. zykhbl 说:

    恩,那你这样子还是写死了所有的文件路径,只不过是写到文件里,我捏,是想做一个支持网盘协议的上传下载的客户端,或者支持ftp协议的,这样子的话都需要在点上传下载按钮时弹出整个iphone(如果是电脑的话就是硬盘的了,像NSOpenPanel那样的)的文件目录,让用户自动选择路径,其实不是直接打开/关闭文件,最终上传下载时也是要读到文件流里
    其实在c语言里不是有
    char *path=[NSHomeDirectory() UTF8String];//起始目录为Home,转为c的字符串
    DIR *dp;
    struct dirent *dirp;

    if ((dp = opendir(path)) == NULL) {
    err_sys(“can`t open %s”, path);
    }

    while ((dirp = readdir(dp)) != NULL) {
    printf(“%s\n”, dirp->d_name);
    //打印出当前目录下的所有文件或文件夹,如果时文件夹的话,用户点一下,就把文件夹的路径作为当前的path,以后//的显示操作又是这样
    }

    closedir(dp);

    PS:不知道这样行不行的通,上面那段代码是相当于unix的命令ls,我不了解iphone的文件目录结构,不知道行不行?

  4. zykhbl 说:

    大哥,你博客的评论回复时间比我这边的晚了大概16个小时,服务器是不是部署在美国西部啊,还是你现在就在那边,呵呵:),算是私人问题了,不好意思..

  5. admin 说:

    嗯,在这边,你小子调查户口么?

    没太理解你的思路… 不过

    想ls,试试nsfilemanager就可以了, 我就在这个帖子后面的帖子里面有用,不过没尝试过在iphone上用.你可以尝试一下,可能会不好使, 因为iphone的沙箱设计, 试试吧

Leave a Reply