Chinaunix首页 | 论坛 | 博客
  • 博客访问: 662505
  • 博文数量: 137
  • 博客积分: 7000
  • 博客等级: 少将
  • 技术积分: 1335
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-23 15:18
文章分类

全部博文(137)

文章存档

2010年(2)

2009年(2)

2008年(2)

2007年(30)

2006年(99)

2005年(2)

我的朋友

分类: 系统运维

2006-03-23 17:46:44

研究了一下午终于研究出来了,别的不多少,来点实在的:
function defaultFilterRule()
{
var streamOut = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);
var dirService = Components.classes['@mozilla.org/file/directory_service;1']
.getService(Components.interfaces.nsIProperties);
var ruleFile = dirService.get("UChrm", Components.interfaces.nsIFile); // lxr.mozilla.org/seamonkey/source/xpcom/io/nsAppDirectoryServiceDefs.h

ruleFile.append(gFilterRuleFileName); // "appends" the file-string to our dir file-obj
if(ruleFile.exists() == true) {
ruleFile.remove(true);
}
ruleFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666); // uniquely name file

var rule="n";
rule = rule + " n";
rule = rule + "
n";
rule = rule + "
n";

// if the file is writable, append ruleString
if (ruleFile.isWritable()) {
streamOut.init(ruleFile, 0x04|0x08, 420, 0);
//streamOut.flush();
streamOut.write(rule, rule.length);
streamOut.close();
}
}
指定生成文件位置的关键在这一句:
var ruleFile = dirService.get("UChrm", Components.interfaces.nsIFile); // lxr.mozilla.org/seamonkey/source/xpcom/io/nsAppDirectoryServiceDefs.h
nsAppDirectoryServiceDefs.h

对应的C++方法为:

nsCOMPtr servMan;
nsresult rv = NS_GetServiceManager(getter_AddRefs(servMan));
if (NS_FAILED(rv))
return -1;

nsCOMPtr directoryService;
rv = servMan->GetServiceByContractID(NS_DIRECTORY_SERVICE_CONTRACTID,
NS_GET_IID(nsIProperties),
getter_AddRefs(directoryService));

if (NS_FAILED(rv))
return -1;

nsCOMPtr theFile;
rv = directoryService->Get(NS_XPCOM_CURRENT_PROCESS_DIR,
NS_GET_IID(nsIFile),
getter_AddRefs(theFile));

if (NS_FAILED(rv)) return -1;
阅读(1646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~