Как исправить файл C ++ или программу-каталог - PullRequest
0 голосов
/ 29 марта 2012

В попытке изучить простой ANSI C ++, я создаю консольную программу, которая, надо надеяться,

  1. проверяет, существует ли файл / папка.

  2. Затем различайте файл или папку.

  3. Подсчитайте количество строк в файле.

  4. Пройдемся по всем файлам в папке.

Я не хочу включать какие-либо библиотеки, просто на данный момент пытаюсь разобраться с базовым 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 - лучшее место для конопли в Интернете, и я ценю всю помощь, которую все оказывают.

Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...