2

我用 python 编写了一个程序,它具有能够找出文件大小、创建目录和移动的功能,就好像我只是在一个普通的 shell 中一样。问题是我需要能够在 C++ 中做到这一点。

这是我需要 c++ 功能的 python 代码:

os.chdir('r'+str(r)+'n'+str(n))
def build_path(newpath):
    if os.path.isdir(newpath):
        os.chdir(newpath)
    else:
        os.mkdir(newpath)
        os.chdir(newpath)

还有这件作品:

if os.stat('data'+str(tick)).st_size > 2500000:
    heavyFile.close()
    tick+=1
    heavyFile=open('data'+str(tick),'w')
os.system('touch COMPLETED'+str(r)+str(n))

所以基本上我需要能够创建一些目录,更改到这些目录,构建文件,但不要让它们变得超过 2.5 MB,当它们最终超过那个大小时,创建一个递增的新文件一。

所以文件树最终看起来像:

r4n4/dir1/data0,data1,data2,etc r4n4/dir2/data0,data1,data2,etc 等等。

我怎样才能在 C++ 中做到这一点?我知道我可以调用 system('command') 但我不知道如何使用它很好地获取文件大小,我只是希望有一种更简单的方法来做到这一点。此外,我无法在运行此程序的地方访问 boost。

4

4 回答 4

2

尝试检查 boost::filesystem 库。( http://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/index.htm ) 您的所有三个请求都包含在本教程中。

于 2013-07-09T19:52:28.280 回答
1

您可以stat()在代码中使用来获取文件系统对象的属性。这是一个例子:

#include <sys/types.h>
#include <sys/stat.h>

struct stat buf;
stat(filename, &buf);

// If it's a regular file, print the size in bytes
if ((buf.st_mode & S_IFREG) == S_IFREG)
{
  off_t size = buf.st_size;
  fprintf(stdout, "%s is a regular file\n", filename);
  fprintf(stdout, "%s is a regular file: size %zd bytes\n", filename, size);
}

还有一些宏stat.h可以让检查某个东西是否是常规文件或其他东西变得更容易一些,而不是像上面那样对多个东西进行“与”运算。例如,S_ISREG 宏将执行与上述代码相同的操作:

if(S_ISREG(buf.st_mode))   /* stat.h macro, instead of AND'ing */
{
  fprintf(stdout, "%s is a regular file\n", filename);
}

S_ISDIR会告诉你它是否是一个目录。还有其他类似的宏。

您可以man -s 2 stat查看 stat() 的手册页并获取更多详细信息。希望这可以帮助。

于 2013-07-09T20:08:13.587 回答
1

您也可以使用以下命令从您的 c++ 代码中调用您的脚本:

system ("python script.py");
于 2013-07-11T03:44:34.007 回答
1

您可以利用系统调用来实现您想要的。如果您使用的是 Linux,请查看以下手册页:

man 2 chdir
man 2 mkdir
man 2 stat
于 2013-07-09T19:55:15.647 回答