检查google-nativeclient文件系统中是否存在目录?

时间:2013-01-24 14:42:12

标签: c++ file-io directory google-nativeclient

我正在尝试检查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}}返回值是否足以让我告诉它是一个目录,还是我应该使用另一种更好的方法?

谢谢,詹姆斯

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,当发布时,它将提供一种更直接的方式来处理目录。