0

我正在尝试检查 Native Client文件系统中是否存在目录,但找不到任何功能来执行此操作。我尝试为目录创建一个PPB_FileRef,然后使用打开该目录,PPB_FileIO::Open然后调用PPB_FileIO::QueryPPB_FileIO::Open返回PP_ERROR_NOTAFILE,然后第二次调用失败。

这是我一直在尝试的代码,为简洁起见,省略了一些初始化。

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_NOTAFILEfromPPB_FileIO::Open的返回值是否PPB_FileRef足以让我告诉它是一个目录,还是我应该使用另一种更好的方法?

谢谢,詹姆斯

4

1 回答 1

1

是的,目前确定 a 是否PPB_FileRef引用目录的方法是尝试打开它并查找PP_ERROR_NOTAFILE返回值。

因为背景PP_ERROR_NOTAFILE是在创建分支之后添加的pepper_25,所以pepper_26在 SDK 中可用之前,应该使用开发以pepper_canarypp_errors.h. 更多详细信息,请参阅相关的 Chrome更改列表,其中特别提到在尝试打开目录时使用此返回值。

当前的行为可以说有点不透明。有一个“开发”(实验性/未完成)界面PPB_DirectoryReader,发布后将提供一种更直接的方式来处理目录。

于 2013-01-24T20:04:25.640 回答