C 코딩으로 txt 파일에서 메일 추출하게 프로그램 짰는데 에러가 발생 하네요. 수정도 해야 됩니다.

jcpejl의 이미지

#include <stdio.h> 
#include <sys/types.h>
#include "MyQueue.h"
#include "dirent.h"
#pragma warning(disable:4996)
myQueue mQueue;
static int
find_directory(
    const char *dirname)
{
    DIR *dir;
    char buffer[PATH_MAX + 2];
    char *p = buffer;
    const char *src;
    char *end = &buffer[PATH_MAX];
    int ok;
    char * extName;
    /* Copy directory name to buffer */
    src = dirname;
    while (p < end  &&  *src != '\0') {
        *p++ = *src++;
    }
    *p = '\0';
    /* Open directory stream */
    dir = opendir (dirname);
    if (dir != NULL) {
        struct dirent *ent;
        /* Print all files and directories within the directory */
        while ((ent = readdir (dir)) != NULL) {
            char *q = p;
            char c;
            /* Get final character of directory name */
            if (buffer < q) {
                c = q[-1];
            } else {
                c = ':';
            }
            /* Append directory separator if not already there */
            if (c != ':'  &&  c != '/'  &&  c != '\\') {
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
                *q++ = '\\';
#else
                *q++ = '/';
#endif
            }
            /* Append file name */
            src = ent->d_name;
            while (q < end  &&  *src != '\0') {
                *q++ = *src++;
            }
            *q = '\0';
            /* Decide what to do with the directory entry */
            switch (ent->d_type) {
            case DT_REG:
                /* Output file name with directory */
                extName = strrchr(ent->d_name, '.');
                if(extName == NULL) break;
                if(strcmp(extName, ".txt") == 0)
                {
                    //printf("fine txt file : %s\n", ent->d_name);
                    //printf ("%s\n", buffer);
                    enqueue(&mQueue, buffer);
                }
                break;
            case DT_DIR:
                /* Scan sub-directory recursively */
                if (strcmp (ent->d_name, ".") != 0  
                        &&  strcmp (ent->d_name, "..") != 0) {
                    find_directory (buffer);
                }
                break;
            default:
                /* Do not device entries */
                /*NOP*/;
            }
        }
        closedir (dir);
        ok = 1;
    } else {
        /* Could not open directory */
        printf ("Cannot open directory %s\n", dirname);
        ok = 0;
    }
    return ok;
}
void myDir(const char * dirPath)
{
    DIR * dp;
    struct dirent * ent;
    char * extName;
    dp = opendir(dirPath);
    if(dp != NULL)
    {
        while(1)
        {
            ent = readdir(dp);
            if(ent == NULL)
                break;
            extName = strrchr(ent->d_name, '.');
            if(strcmp(extName, ".txt") == 0)
                printf("fine txt file : %s\n", ent->d_name);
        }
    } 
}
int IsAvailableEMail(const char * srcMail)
{
    // 찾음 : 1
    // 없음 : 0
 
    int iAtCount = 0;   //@ 위치
    int iDotCount = 0;  // . 위치
    int i;
    char * eMail = (char*)malloc( strlen(srcMail) + 1 );
    strcpy(eMail, srcMail);
 
    if(strcmp(eMail, "") == 0)    return 0;
 
    for(i = 0; i < strlen(eMail); i++)
    {
        if(i > 0 && eMail[i] == '@' ) iAtCount = i+1;    // ①
        if(iAtCount > 0 && i > iAtCount && eMail[i] == '.') iDotCount = i+1;   // ②
    }
    free(eMail);
    if(i > iDotCount && iAtCount > 0 && iDotCount > 0) return 1;     // ③    
    else return 0;
}
int main()
{
    //입력받은 디렉토리에서 확장자가 .txt인 파일을 찾고
    //큐에 넣은 후 이메일 주소를 뽑아내는 구조
    //큐 초기화
    FILE * fp;
    char buf[1024];
    char * path;
    const char * filePath;
    initQueue(&mQueue);
 
    //디렉토리 순회
    find_directory("C:\\Mail");
    ////제대로 나오는지 출력
    //while( !empty(&mQueue) )
    //{
    //    printf("%s\n", frontQueue(&mQueue));
    //    deQueue(&mQueue);
    //}
    //
 
    //찾은 파일을 열어서 이메일 주소를 확인
    while( !empty(&mQueue) )
    {
        path = frontQueue(&mQueue);
        filePath = path;
        fp = fopen(filePath, "r");
        if(fp != NULL)
        {
            int isEmail;
            char * ch;
            int i;
            //while(fgets(buf, 1024, fp))
            while( 0 < fscanf(fp, "%s", buf) )
            {
                //printf("%s", buf);
                isEmail = IsAvailableEMail(buf);
                if(isEmail)
                {
                    ch = strchr(buf, '"');
                    if(ch != NULL)
                        *ch = ' ';
                    ch = strchr(buf, '(');
                    if(ch != NULL)
                        *ch = ' ';
                    ch = strchr(buf, ')');
                    if(ch != NULL)
                        *ch = ' ';
                    printf("%s\n", buf);
                }
            }
            fclose(fp);
            deQueue(&mQueue);
        }
    }
    destroyQueue(&mQueue);
 
    return 0;
}

현재 위 소스 코드 진행중인데요.일단 포함 파일을 열 수 없습니다라고 에러가 뜹니다>> 'MyQueue.h': No such file or directory
목적은 특정폴더로 첨부파일 - 하위 디렉토리 내의 파일도 검사도 해야 하구요. 저장되어 있는 텍스트 파일(txt)의 내용을 검사하여 파일 내 저장 되어있는 이메일 주소를 찾아 내는 프로그램을 만드는건데 (이메일 주소는 (^[0-9a-zA-Z_-]+@[0-9a-zA-Z]+[.][a-zA-Z]{2,4}$) 정규표현식 이구요)
검출한 정보는 아래와 같은 형식으로 파일로 저장 되어야 해요.

======================= Output ========================

[파일 위치]                   [파일명]            [건수]    [이메일]
 
c://data/test1/temp        다.txt                 1         <a href="mailto:a@naver.com" rel="nofollow">a@naver.com</a>; <a href="mailto:b@naver.com" rel="nofollow">b@naver.com</a>
c://data/test1             나.txt                 1         <a href="mailto:ab@naver.com" rel="nofollow">ab@naver.com</a>; <a href="mailto:abc@naver.com" rel="nofollow">abc@naver.com</a>
c://data                   가.txt                 1         <a href="mailto:a@naver.com" rel="nofollow">a@naver.com</a>; <a href="mailto:b@naver.com" rel="nofollow">b@naver.com</a>
mirheekl의 이미지


그걸 직접 작성하셨다면 해결을 못하셨을리가 없으니 아무래도 누락된 모양이네요. 누군가 만든 사람이 있을테니 구해서 저장하시면 되겠습니다.

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.