从c ++运行一些命令行命令

时间:2013-07-09 19:50:24

标签: c++ python linux command-line

我在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,当它们最终超过这个大小时,创建一个新文件,增加1。

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

r4n4 / DIR1 / DATA0,DATA1,DATA2,等 r4n4 / DIR2 / DATA0,DATA1,DATA2,等 等等。

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

man 2 chdir
man 2 mkdir
man 2 stat

答案 2 :(得分: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中还有一些宏,它们可以更容易地检查某些内容是否是常规文件或其他内容,而不是如上所述的多个AND。例如,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()的手册页并获取更多详细信息。希望这会有所帮助。

答案 3 :(得分:1)

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

system ("python script.py");