2017-09-05 3 views
-1

私はこのディレクトリを削除するコードを持っています。私はheader1.hheader1.cmain.cです。 私はいくつかのエラーが発生しますが、私はエラーが理解するのが難しいです: (1)記憶容量ffblkは知られていません。 また、私はff_nameとff_attribffblkの属性を定義する方法について疑問を抱いています。この例は、インターネットからのさまざまなコード例からです(ここでは他のものも同じです)。ケースが動作しません。 構造体の定義がありませんか?または多分私はそれが任意のコードであってはならないコードを追加しましたか? 私を助けてもらえますか?私は通常Cでプログラムをやりません。私はDev-Cppを使っています。C - エラーが定義されていません。ストレージが不明です

header1.h:

#ifndef HEADER1_H_INCLUDED 
#define HEADER1_H_INCLUDED 

typedef struct ffblk ffblk; 

#endif 

header.c:

#include <stdio.h> 
#include <stdlib.h> 
#include "header1.h" 
struct ffblk 
{ 
    char ff_attrib[20]; //this line i added just so dont show error of unknown 
    char ff_name[20]; //this line i added just so dont show error of unknown 
}; 

のmain.c:

#ifndef FA_RDONLY 
    #define FA_RDONLY _A_RDONLY 
#endif 

#ifndef FA_HIDDEN 
    #define FA_HIDDEN _A_HIDDEN 
#endif 

#ifndef FA_SYSTEM 
    #define FA_SYSTEM _A_SYSTEM 
#endif 

#ifndef FA_DIREC 
    #define FA_DIREC _A_SUBDIR 
#endif 

#ifndef FA_ARCH 
    #define FA_ARCH _A_ARCH 
#endif 


# include <stdio.h> 
# include <dos.h> 
# include <dir.h> 
# include <io.h> 
# include <conio.h> 
#include "header1.h" 

    typedef struct ffblk ffblk; 

int BorrarArchivo(char *nombarch) 
{ 
    printf("Borrando Archivo %s \n",nombarch); 

    remove(nombarch); 

    return 0; 
} 

int EliminarAtributo(char *nombarch,int atributo) 
{ 
    printf("Elimina Atributo %s %d\n",nombarch,atributo); 

    chmod(nombarch,atributo); 

    return 0; 
} 

int BorrarArbol(void) 
{ 
    struct ffblk ffblk; 
    int done,err; 

    err=0; 
    done=findfirst("*.*",&ffblk,FA_RDONLY|FA_HIDDEN|FA_DIREC|FA_ARCH|FA_SYSTEM); 

    while (!done) 
    { 
    if (FA_HIDDEN & ffblk.ff_attrib) 
     EliminarAtributo(ffblk.ff_name,FA_HIDDEN); 

    if (FA_SYSTEM & ffblk.ff_attrib) 
     EliminarAtributo(ffblk.ff_name,FA_SYSTEM); 

    if (FA_RDONLY & ffblk.ff_attrib) 
     EliminarAtributo(ffblk.ff_name,FA_RDONLY); 

    if (FA_ARCH & ffblk.ff_attrib) 
     err=BorrarArchivo(ffblk.ff_name); 
    else if (FA_DIREC & ffblk.ff_attrib) 
    { 
     if (ffblk.ff_name[0]!='.') 
     { 
      chdir(ffblk.ff_name); 

      err=BorrarArbol(); 

      chdir(".."); 

      if (!err) 
       printf("Removiendo %s\n",ffblk.ff_name); 

      rmdir(ffblk.ff_name); 
     } 
    } 
    else 
     err=BorrarArchivo(ffblk.ff_name); 

    if (err) 
    { 
     printf("Error en el borrado ... !"); return err; 
    } 

    done=findnext(&ffblk); 
    } 

    return 0; 
} 

int main (void) 
{ int err=0; 
    char c; 
    printf("Esta seguro [ Si -> S , No ->otra tecla ] =>"); 
    c=getchar(); 
    if (!(c=='S' || c=='s')) return 0; 
    err=BorrarArbol(); 
    if (err) printf("Error en el borrado ... !"); 
    return err; 
} 

EDIT: 私は構造体の定義を発見し、それを貼り付けますheader.h

typedef struct ffblk { 
     char lfn_magic[6];  /* LFN: the magic "LFN32" signature */ 
     short lfn_handle;  /* LFN: the handle used by findfirst/findnext */ 
     unsigned short lfn_ctime; /* LFN: file creation time */ 
     unsigned short lfn_cdate; /* LFN: file creation date */ 
     unsigned short lfn_atime; /* LFN: file last access time (usually 0) */ 
     unsigned short lfn_adate; /* LFN: file last access date */ 
     char ff_reserved[5];  /* used to hold the state of the search */ 
     unsigned char ff_attrib; /* actual attributes of the file found */ 
     unsigned short ff_ftime; /* hours:5, minutes:6, (seconds/2):5 */ 
     unsigned short ff_fdate; /* (year-1980):7, month:4, day:5 */ 
     unsigned long ff_fsize; /* size of file */ 
     char ff_name[260];  /* name of file as ASCIIZ string */ 
    }ffblk; 

今ではエラーを示しています。最後に

C:\Users\1\AppData\Local\Temp\cc89P309.o:Untitled3.c:(.text+0x8e): undefined reference to `findfirst' 
C:\Users\1\AppData\Local\Temp\cc89P309.o:Untitled3.c:(.text+0x1d8): undefined reference to `findnext' 
+0

コードのどの行にエラーが表示されますか? –

+0

また、header.cに 'struct ffblk'の定義を追加した後に表示されますか? –

+0

当初のコードはmain.cだけでしたが、私は複数のエラーが出て、header.hとheader.cを作成した例を見ています。残りのエラーはmain.cのstruct ffblk ffblkの宣言に現れます。 –

答えて

0

を、問題が常にFindFirstの(A、B、C)の関数であり、FindNextの(A、B、C)。私は関数を変更して、それらのバージョンを2つのパラメータで使用する必要がありました。3つのコードをinclude、typedef構造体、および以下のコードで1つのファイルに入れました。

関連する問題