View Full Version : Symbian中是否有类似于IE的查找本地文件的功能?
在Symbian中的Dialog是否有类似于IE中的“浏览”的功能,就是可以在本地的目录文件夹中进行查找,如果可以进行查找,那目标文件是否可以找到?
beover1984
2005-11-22, 09:26
下面的方法应该可以打开一个文件选择对话框,AknCommonDialogs在AknCommonDialogs.h中定义
TFileName fileToOpen;
_LIT( KFileSelectionTitle, "选择文件" );
// show fileopen dialog from akncommondialogs
if( !AknCommonDialogs::RunSelectDlgLD(fileToOpen, //返回的文件名在这里
R_MEMORY_SELECTION_DIALOG, KFileSelectionTitle) )
{
return;
}
beover1984, 如果方便的话,你能把R_MEMORY_SELECTION_DIALOG的定义给我吗,我刚刚随便替换了一个,出错了,我只是想做一个Demo的东西,越简单越好
beover1984
2005-11-22, 09:50
R_MEMORY_SELECTION_DIALOG应该是系统定义的,文件中包含documenthandlerui.rsg就行了
#include<documenthandlerui.rsg>
beover1984
2005-11-22, 09:57
不好意思,刚才看错了,R_MEMORY_SELECTION_DIALOG应该是自己定义的
RESOURCE MEMORYSELECTIONDIALOG r_memory_selection_dialog
{
title = "title string";
softkey_1 = "ok string";
softkey_2 = "cancel string";
}
在我本地定义r_memory_selection_dialog 出错了,应该是不认MEMORYSELECTIONDIALOG,需要引入什么头文件吗?
beover1984
2005-11-22, 10:19
需要添加头文件CommonDialogs.rh
可能还会产生链接错误,需要在MMP文件中添加CommonDialogs.lib,然后重新生成工程
现在r_memory_selection_dialog的问题解决了,可是
if( !AknCommonDialogs::RunSelectDlgLD(fileToOpen,
R_MEMORY_SELECTION_DIALOG, KFileSelectionTitle) )
又出错了,错误提示是KERN-EXEC 3,不知是什么原因????
好了,现在问题解决了,谢谢你 beover1984,你的回答总是那么的及时,谢谢!!!!!!
beover1984
2005-11-22, 10:30
KERN-EXEC 3
This panic is raised when an unhandled exception occurs. Exceptions have many causes, but the most common are access violations caused, for example, by dreferencing NULL. Among other possible causes are: general protection faults, executing an invalid instruction, alignment checks, etc.
是不是有的对象还没分配就访问了?
可惜我这没有AknCommonDialogs的代码
还得请教 beover1984一个问题,如果我要一上来就给一个默认路径,比如C:\Nokia\Others ,怎么实现啊?还有如果这个可以实现的话,我是否可以把该目录固定化,就是不让用户返回上一级目录,请beover1984帮我解答,谢谢!!!!!!!!!!!!!!!!
好了,问题全部解决了,再次感谢 beover1984!!!!!!!!!!!!!
想问一下如何指定显示的路径。 Lxy79 ,能否告知一下??
beover1984
2005-11-23, 10:06
CommonDialogs.rh
应该是下面这样写, 具体可参考CommonDialogs.rh
RESOURCE MEMORYSELECTIONDIALOG r_memory_selection_dialog
{
title = "title string";
softkey_1 = "ok string";
softkey_2 = "cancel string";
locations = location_default;
}
RESOURCE LOCATION location_default
{
root_path = "C:\\"
default_folder = "C:\\default"
}
能否制定文件类型,例如只显示 .txt 或者 .3gp 文件?
beover1984
2005-11-23, 10:21
参考AknCommonDialogs.h中
IMPORT_C static TBool RunSelectDlgLD(
TDes& aFileName,
TInt aMemorySelectionResourceId,
MAknFileFilter* aFilter,
MAknFileSelectionObserver* aObserver = NULL );
或者参考CommonDialogs.rh中
STRUCT FILESELECTIONDIALOG
{
LTEXT title;
LTEXT softkey_1_file;
LTEXT softkey_1_folder;
LTEXT softkey_2_root_level;
LTEXT softkey_2_subfolder;
LTEXT root_path;
LTEXT default_folder;
STRUCT filters[]; // FILTER structs
}
我看着应该是用第二种方法
直接写 locations 会报错的。不知道你有没有看过
看了 CommonDialogs.rh, 里边的确有许多定义
那么 struct locations[] 这种应该怎么定义好?
beover1984
2005-11-23, 10:50
我没这方面代码,下面如果再不行,你还是问楼主要吧
RESOURCE MEMORYSELECTIONDIALOG r_memory_selection_dialog
{
title = "title string";
softkey_1 = "ok string";
softkey_2 = "cancel string";
locations
{
root_path = "C:\\";
default_folder = "C:\\default";
};
}
beover1984
2005-11-23, 10:53
RESOURCE MEMORYSELECTIONDIALOG r_memory_selection_dialog
{
title = "title string";
softkey_1 = "ok string";
softkey_2 = "cancel string";
locations
{
LOCATION
{
root_path = "C:\\";
default_folder = "C:\\default";
}
};
}
location的问题解决了
不过还有一个问题,就是我怎么处理文件名
fileopen是一个文件名(路径名和文件名,全部的)
但是我如果直接用这个文件名来打开文件的话
是找不到文件的
因为 \ 的原因
我想问一下是否有什么api直接可以处理,例如 把 c:\temp\youfile.app
转换为 c:\\temp\\youfile.app ?????????
而不用我去处理字符串。
谁知道??
突然想起 fileopen 是 TFileName的。这个怎么写setter和getter?
beover1984
2005-11-28, 01:45
typedef TBuf<KMaxFileName> TFileName;
上面就是TFileName的定义,你用Copy()就可以拷贝了,另外你上面说的那个问题"c:\\temp\\youfile.app"在内存中的表示就是" c:\temp\youfile.app",直接用它的返回值应该没问题,你再仔细检查一下.
我的程序中用到的是另一个api,那个api只接收TDesC的。这就意味着我必须做这个转换。否则它不会认这个路径的。
beover1984
2005-11-28, 03:05
所有的描述符都是从TDesC派生的,当然也包括TBuf,这个不需要转换,你看看是不是其它的问题,要不就贴出相关代码看一下
问题已解决
是我的代码中逻辑写反了
结果没有执行到。
非常感谢 :P
beover1984
2005-11-28, 08:12
要养成严谨的好习惯,遇到问题应该先调试一下,确定出错的地方:D