gpt4 book ai didi

c++ - 在 C++ 中使用完整路径打开文件

转载 作者:行者123 更新时间:2023-11-30 03:05:20 29 4
gpt4 key购买 nike

这个问题真的让我一时难住了。该程序搜索文件目录及其所有子目录。当它到达一个不是目录类型的文件时,我想打开该文件,将其放入缓冲区并将其与另一个已经在另一个缓冲区中的文件进行比较。问题是文件无法打开,给我一个文件或目录不存在的错误号。我的假设是它试图仅通过文件名而不是整个路径打开文件。那么我将如何拉入整个路径?我尝试了一些最终导致编译错误的事情。谁能给我一个快速指示?

#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <cctype>
#include <cstdio>
#include <string>
#include <list>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

using std::string;
using std::ostream;
using std::list;
using std::endl;

off_t tell(int fd) {
return lseek(fd, 0, SEEK_END);
}

void dir_traverse(const std::string& path, std::ostream& out) {
list<string> child_directories;
DIR*dirp = opendir(path.data());
struct dirent*dir_entry = readdir(dirp);
while(dir_entry !=NULL){
unsigned char d_type = dir_entry->d_type==DT_DIR?'D' : 'F';
if(d_type == 'D'){
if(dir_entry->d_name[0]!= '.') {
child_directories.push_back(dir_entry->d_name);
out<<'\t'<<d_type<<":"<<dir_entry->d_name<<endl;
}
}
if(d_type == 'F'){

int fd= open(dir_entry->d_name, O_RDONLY);
if(fd =-1){
out<<"file did not open"<<'\t'<<errno<<endl;
}
int size= tell(fd);

out<<'\t'<<d_type<<":"<<dir_entry->d_name<<endl;

close(fd);

//open file
//read file
//compare two files
//print name of file and path if two are equal otherwise do nothing

}
dir_entry= readdir(dirp);
}
list<string>::iterator it = child_directories.begin();
while(it != child_directories.end()) {
dir_traverse(path + "/" + *it, out);
it++;
}
closedir(dirp);
}

int main() {
dir_traverse("./homework", std::cout);
}

最佳答案

连接它们:

open((path + "/" + dir_entry->d_name).c_str(), ...)

关于c++ - 在 C++ 中使用完整路径打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775994/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com