在linux下用C语言或c++语言遍历指定文件夹下的所有文件
时间: 2023-06-26 17:04:42 浏览: 738
可以使用Linux下的标准库函数dirent.h中的readdir()函数来实现遍历指定文件夹下的所有文件。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
#include <dirent.h>
int main() {
char path[100];
printf("请输入要遍历的文件夹路径:");
scanf("%s", path);
DIR *dir;
struct dirent *ptr;
dir = opendir(path);
if (dir == NULL) {
printf("打开文件夹失败!\n");
return 1;
}
while ((ptr = readdir(dir)) != NULL) {
// 过滤掉父目录和当前目录
if (strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)
continue;
printf("%s\n", ptr->d_name);
}
closedir(dir);
return 0;
}
```
该程序会提示用户输入要遍历的文件夹路径,然后利用opendir()打开该文件夹,并通过循环遍历readdir()函数返回的每一个文件名。如果文件名为“.”或“..”,则跳过不处理。
相关问题
在linux系统下,用c语言编写用opencv将路径/root/photo/compressphoto中的.jpg图片解压缩到路径/root/photo/decompressphoto中,给出相应程序和对应的Makefile文件,注意opencv文件处于/root/opencv-4.5.1文件夹中。要求代码简洁易懂并说明效果
程序如下:
```c
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 设置解压缩路径
String input_folder = "/root/photo/compressphoto/";
String output_folder = "/root/photo/decompressphoto/";
// 打开输入路径
DIR* dir = opendir(input_folder.c_str());
if (!dir)
{
printf("无法打开输入路径\n");
return -1;
}
// 遍历输入路径中的所有文件
struct dirent* entry;
while ((entry = readdir(dir)) != NULL)
{
String filename = entry->d_name;
// 如果是.jpg文件,则进行解压缩
if (filename.find(".jpg") != std::string::npos)
{
// 读取压缩后的图片
Mat img_compressed = imread(input_folder + filename, IMREAD_UNCHANGED);
if (img_compressed.empty())
{
printf("无法读取压缩后的图片:%s\n", filename.c_str());
continue;
}
// 解压缩图片
Mat img_decompressed;
cv::imdecode(img_compressed, IMREAD_UNCHANGED, &img_decompressed);
if (img_decompressed.empty())
{
printf("无法解压缩图片:%s\n", filename.c_str());
continue;
}
// 写出解压缩后的图片
if (!imwrite(output_folder + filename, img_decompressed))
{
printf("无法写出解压缩后的图片:%s\n", filename.c_str());
continue;
}
printf("成功解压缩图片:%s\n", filename.c_str());
}
}
closedir(dir);
return 0;
}
```
Makefile文件如下:
```Makefile
# 编译器
CC = g++
# 头文件路径
INCLUDE_PATH = -I/root/opencv-4.5.1/include
# 库文件路径
LIBRARY_PATH = -L/root/opencv-4.5.1/lib
# 库文件
LIBRARY = -lopencv_core -lopencv_highgui -lopencv_imgcodecs
# 编译选项
CFLAGS = -Wall -g -std=c++11 $(INCLUDE_PATH) $(LIBRARY_PATH) $(LIBRARY)
# 目标文件
TARGET = decompressphoto
# 源文件
SOURCE = decompressphoto.cpp
# 默认目标
.DEFAULT_GOAL := $(TARGET)
$(TARGET): $(SOURCE)
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f $(TARGET)
```
这个程序可以将路径`/root/photo/compressphoto`中的所有`.jpg`文件解压缩到路径`/root/photo/decompressphoto`中。程序首先打开输入路径,然后遍历输入路径中的所有文件,如果是`.jpg`文件,则进行解压缩,然后将解压缩后的图片写出到输出路径中。程序使用了OpenCV的`imread`和`imwrite`函数来读取和写出图片,使用了`imdecode`函数来解压缩图片。Makefile文件使用了g++编译器,指定了头文件路径和库文件路径,并链接了OpenCV的核心库、高级GUI库和图像编解码库。
阅读全文