C++ 仅使用C/C+;写入期间的iOS文件大小+;原料药
目的:我正在使用BSD内核队列监视iOS上特定目录中的文件写入,并轮询文件大小以确定写入结束(当大小停止更改时)。其基本思想是仅在iTunes sync提供任意数量的文件副本后刷新文件夹。我有一个完全工作的ObjuleC实现,但是我有理由需要在C++中实现同样的事情。C++ 仅使用C/C+;写入期间的iOS文件大小+;原料药,c++,ios,file,C++,Ios,File,目的:我正在使用BSD内核队列监视iOS上特定目录中的文件写入,并轮询文件大小以确定写入结束(当大小停止更改时)。其基本思想是仅在iTunes sync提供任意数量的文件副本后刷新文件夹。我有一个完全工作的ObjuleC实现,但是我有理由需要在C++中实现同样的事情。 问题:阻止我的是,在写过程中,找不到C或C++ API将获得正确的文件大小。想必,其中一个必须存在,因为Objective-C的[NSFileManager AttributesFiteMatPath:]似乎可以工作,我们都知道
<强>问题:阻止我的是,在写过程中,找不到C或C++ API将获得正确的文件大小。想必,其中一个必须存在,因为Objective-C的[NSFileManager AttributesFiteMatPath:]似乎可以工作,我们都知道它只是在下面调用一个C API
失败的解决方案:如果您的路径没有像我的路径那样被无形地破坏,那么上述任何一种文件大小方法都可能有效。请参阅关于路径为何被破坏的公认答案。这个奇怪的行为原来是路径的问题,导致字符串可以正常打印,但很可能在内存中被破坏,以至于文件描述符有时不喜欢它(因此只发生在某些文件路径中)。我使用direntapi迭代目录中的文件,并错误地连接dir路径和文件名 错误的路径连接:显然(或者在运行时不那么明显)三次复制str不会有好的结果
char* fullPath = (char*)malloc(strlen(dir) + strlen(file) + 2);
strcpy(fullPath, dir);
strcpy(fullPath, "/");
strcpy(fullPath, file);
long sizeBytes = getSize(fullPath);
free(fullPath);
正确的路径连接:使用正确的str连接
char* fullPath = (char*)malloc(strlen(dir) + strlen(file) + 2);
strcpy(fullPath, dir);
strcat(fullPath, "/");
strcat(fullPath, file);
long sizeBytes = getSize(fullPath);
free(fullPath);
长话短说,这是我草率的工作,通过两个打字错误