我正在尝试检查Native Client file system中是否存在目录,但找不到任何功能。我尝试为目录创建PPB_FileRef
,然后使用PPB_FileIO::Open
打开它,然后调用PPB_FileIO::Query
,但PPB_FileIO::Open
返回PP_ERROR_NOTAFILE
,然后第二次调用失败。< / p>
这是我一直在尝试的代码,为简洁起见,省略了一些初始化。
PP_Instance instance; // initialised elsewhere
PPB_FileRef *fileRefInterface; // initialised elsewhere
PPB_FileIO *fileIOInterface; // initialised elsewhere
PP_Resource fileSystemResource; // initialised elsewhere
PP_Resource fileRefResource = fileRefInterface->Create(
fileSystemResource,
"/directory");
PP_Resource fileIOResource = fileIOInterface->Create(instance);
// This call is returning PP_ERROR_NOTAFILE
//
int32_t result = fileIOInterface->Open(
fileIOResource,
fileRefResource,
PP_FILEOPENFLAG_READ,
PP_BlockUntilComplete()); // this is being called from a background thread.
if (result != PP_OK)
{
return false;
}
PP_FileInfo info;
result = fileIOInterface->Query(fileIOResource, &info, PP_BlockUntilComplete());
if (result != PP_OK)
{
return info.type == PP_FILETYPE_DIRECTORY;
}
return false;
PP_ERROR_NOTAFILE
的有效PPB_FileIO::Open
的{{1}}返回值是否足以让我告诉它是一个目录,还是我应该使用另一种更好的方法?
谢谢,詹姆斯
答案 0 :(得分:1)
是的,目前确定PPB_FileRef
是否引用目录的方法是尝试打开它并查找PP_ERROR_NOTAFILE
返回值。
对于PP_ERROR_NOTAFILE
分支后添加了后台pepper_25
,因此在SDK中可用pepper_26
之前,应使用pepper_canary
进行开发以获取其定义在pp_errors.h
。有关详细信息,请参阅相关的Chrome change list,其中特别提到尝试打开目录时使用此返回值。
目前的行为可能有点不透明。有一个“dev”(实验/未完成)接口PPB_DirectoryReader
,当发布时,它将提供一种更直接的方式来处理目录。