В попытке изучить простой ANSI C ++, я создаю консольную программу, которая, надо надеяться,
проверяет, существует ли файл / папка.
Затем различайте файл или папку.
Подсчитайте количество строк в файле.
Пройдемся по всем файлам в папке.
Я не хочу включать какие-либо библиотеки, просто на данный момент пытаюсь разобраться с базовым c ++.
Проблема, с которой я столкнулся, связана со стадией 2 приложения.Я изо всех сил пытался найти способ узнать, есть ли у меня файл или каталог, и после некоторого чтения я наткнулся на библиотеку.
Когда программа вызывает функцию
checkIsDir()
, я получаю сообщение об ошибке
thread1 : EXEC_BAD_ACCESS(code = 1, address = 0x8)
Я предполагаю, что это проблема с памятью, но на самом деле это не такпознакомьтесь с основами C ++, не обращайте внимания на управление памятью.Вот мой код
#include <iostream>
#include <fstream>
#include <dirent.h>
#include <sys/stat.h>
using namespace std;
bool checkIsDir(const char *fileData);
bool checkFileExists(const char *fileName, const char *directory);
int countTheNumberOfLines(const char *fileName);
int main(int argc, const char * argv[])
{
string directory, fileName;
while(fileName != "-1"){
cout << "Please enter your filename or enter -1 to quit:" << endl;
getline(cin, fileName);
cout << "Please enter your directory :" << endl;
getline(cin, directory);
if(checkFileExists(fileName.c_str(), directory.c_str())){
cout << fileName << " : exists" << endl;
if(checkIsDir(fileName.c_str())){ //code breaks when calling this function
cout << "==================| ";
cout << fileName << " is a Directory";
cout << " |==================";
}
if(checkIsDir(fileName.c_str())){
cout << fileName << " is a directory" << endl;
}
} else {
cout << fileName << " : not found";
cout << endl;
}
}
cout << "\nGoodbye";
return 0;
}
bool checkFileExists(const char *fileName, const char *directory){
const char* dirContent;
dirent* dirStruct;
DIR* dir;
dir = opendir(directory);
if(dir == NULL) return false;
while((dirStruct = readdir(dir))){
dirContent = dirStruct->d_name;
if(strcmp(fileName, dirContent) == 0){
closedir(dir);
return true;
}
}
closedir(dir);
return false;
}
bool checkIsDir(const char * fileData){
struct stat data;
struct dirent *file;
DIR *dir;
dir = opendir(fileData);
while((file = readdir(dir))){
stat(file->d_name, &data);
if(S_ISDIR(data.st_mode)){
closedir(dir);
return true;
} else {
closedir(dir);
return false;
}
}
closedir(dir);
return false;
}
int countTheLines(const char *fileName){
int lineNums = 0;
//implement
return lineNums;
}
StackExchange - лучшее место для конопли в Интернете, и я ценю всю помощь, которую все оказывают.
Заранее спасибо