前言
在旧版本的IDE中新建一个C/C++源文件,你可能会看到这种样子的main函数
int main(int argc,char* argv[])
{
return 0;
}
上面这个argc,argv到底有什么用呢?
分析
初探类型
先看argv,可以理解成它是一个string数组(char数组可以理解成一个string,为了方便叙述都用string来表示),而argc是一个int类型
int argc,char* argv[]
这两者的关系是:**argc表示argv中存放string的个数,**默认的argc=1,因为argv[0]就是你当前程序的路径。
执行下面代码:
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<"argc: "<<argc<<endl;
cout<<"argv: "<<argv[0]<<endl;
return 0;
}
看到结果:
文件IO
看到这里你肯定明白了,argc是argv中存放string的数量,有了这个我们就可以遍历这个数组了
现在我们有了文件路径,可以干什么?没错 IO
首先我们在该文件目录下,新建一个文本文件叫123.txt,里面输入 abcdefg
运行如下代码,你会看到…什么也没有发生…因为我们没有读取文件。
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
ifstream Open;
//这是个示例。在工程中IO务必检查文件是否存在
Open.open(argv[1]);
cout<<"argc: "<<argc<<endl;
const int len=100;
char str[len];
while(Open.getline(str,len))
{
cout<<str<<endl;
}
return 0;
}
读取文件
怎么读取文件?
win下
打开win+R,输入cmd,打开我们熟悉的黑框框,首先切换目录,然后运行test 123.txt
成功了!可以看到argc为2,说明argv里面有两个string
原图中是在目录下创建MyTXT.txt,内容为This is a test.
linux下
在目录下,打开终端,输入./test 123.txt
可以看到读取出该txt文件内容。
使用readdir()
可以读取文件目录
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char **argv)
{
DIR *pDir = NULL;
struct dirent * pEnt = NULL;
unsigned int cnt = 0;
if (argc != 2)
{
printf("usage: %s dirname\n", argv[0]);
return -1;
}
pDir = opendir(argv[1]);
if (NULL == pDir)
{
perror("opendir");
return -1;
}
while (1)
{
pEnt = readdir(pDir);
if(pEnt != NULL)
{
if (pEnt->d_type == DT_REG)
{
printf("是普通文件:");
}
else
{
printf("不是普通文件:");
}
printf("name:[%s] \n", pEnt->d_name);
cnt++;
}
else
{
break;
}
};
printf("总文件数为:%d\n", cnt);
return 0;
}
读取该层级文档目录时,需要使用./test .
读取上一层级文档目录时,需要使用./test ..
在该目录下包含
1.-test
2.-123.txt
3.-aaa
3.1->321.txt
结果如下:
版权声明:本文为CSDN博主「hhmy77」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hhmy77/article/details/91053139