copyfile_state_get始终显示0

时间:2018-05-02 18:53:32

标签: c++ macos

我一直在尝试使用Apple的COPYFILE库(用C语言编写)来制作我正在制作的程序(用C ++编写)。我已经完成了大部分工作,但我无法弄清楚如何获得字节数。来自documentation

  

COPYFILE_STATE_COPIED

     

获取到目前为止复制的数据字节数。 (仅对copyfile_state_get()有效;有关回调的更多详细信息,请参阅下文。)dst参数是指向off_t的指针(类型为off_t *)。

copyfile_state_get()的用法如下(来自相同的文档):

copyfile_state_get(copyfile_state_t state, uint32_t flag, void * dst);

我目前的代码看起来像这样:

// Main function:
off_t* currentBytes = 0;
copyfile_state_t state = copyfile_state_alloc();
copyfile_flags_t flags = COPYFILE_RECURSIVE | COPYFILE_DATA;
copyfile(//SOURCE, //DESTINATION, state, flags);

// Somewhere in the callback function:
cout << copyfile_state_get(state, COPYFILE_STATE_COPIED, currentBytes);

复制部分工作正常(文件被复制),但从回调函数输出的所有内容都是0x0。我尝试过使用指向off_t指针的指针,确实给我一个实际地址(?),例如0x10335ad5c8,但我可以&似乎没有比这更进一步了。我对指针和地址并不是很熟悉,所以也许我错过了一些东西,但我希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:2)

您似乎应该使用这样的内容传递off_t的地址,以便copyfile_state_get(...)可以填写该值。

同样正如文件所述;

All of the other functions return 0 on success, and less than 0 on error.

您可能希望打印currentBytes而不是返回值。

off_t currentBytes = 0; // Space for an actual off_t
...
// Somewhere in the callback function
copyfile_state_get(state, COPYFILE_STATE_COPIED, &currentBytes);
cout << currentBytes;
相关问题