我在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') 但我不知道如何使用它很好地获得文件大小,我只是希望有一个更简单的方法来做到这一点。 此外,我无法访问我运行此程序的位置。
答案 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");