Waitrud Weber’s blog

things and reminders for memories

010 Redesign directory search.

Allocation of char_string is very important.
I could easily controll keep filename when I used copyof.


// list_directory.cpp
//
//
//
//
//
char* FileControler::copyof ( char* str ) {
 int ac = array_count(str);
 char* mem = (char*)malloc( sizeof(char) * (ac + 1) );

 for ( int i=0; i<ac; i++) {
  mem[i] = str[i];
 }

 mem[ac] = '\0';
 return mem;
}

// list_directory.cpp
//
//
//
//
//
char** FileControler::get_files ( char* lpcstr_path ) {
 WIN32_FIND_DATA ffd;
 HANDLE hFind = INVALID_HANDLE_VALUE;
 char* ffdc_filename;

    // Prepare string for use with FindFile functions.  First, copy the
    // string to a buffer, then append '\*' to the directory name.
 hFind = FindFirstFile( TEXT( lpcstr_path ), &ffd );
 ffdc_filename = TEXT( ffd.cFileName );

 printf ( "filename: %s\r\n", ffdc_filename );
 printf ( "lpcstr_path: %s\r\n", TEXT( lpcstr_path ) );

 int index = 0;
    // List all the files in the directory with some info about them.
 do
 {
  // Allocation of char_string
  ffdc_filename = copyof( (char*)ffd.cFileName );
  printf ( "ffdc_filename: %d: %s\r\n", index, ffdc_filename );
  //this->print_strings ();
  index++;
  char* char_directory = to_directory ( lpcstr_path, ffdc_filename );

  if ( char_directory == NULL || m_compare( ffdc_filename, (char*)".") == 1 || m_compare( ffdc_filename, (char*)"..") == 1 ) {
   printf( "skip away : %s\r\n", ffdc_filename );
  } else {
   this->put_string ( char_directory ); //fullpath
   if ( ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
    char* listfiles = (char*) m_concat( (char*)char_directory, (char*)"\\*" );
    this->get_files( (char*) listfiles );
   }
  }
 }
 while ( FindNextFile(hFind, &ffd ) != 0);

 FindClose(hFind);
}

I'm pleasure if you download the below.

https://github.com/WaitrudWeber/source_zip/blob/master/php_20190103.zip


Please reffer to the below for compilation.

https://waitrudweber.hatenablog.com/entry/2018/05/01/005938

 


> .\main_000.exe
start_index: 2
filename: .
lpcstr_path: .\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 2: aDebug.cpp
index: 0 str .\aDebug.cpp
index: 1 str .\aDebug.cpp|.\aDebug.cpp
ffdc_filename: 3: aDebug.h
index: 1 str .\aDebug.h
index: 2 str .\aDebug.h|.\aDebug.h
ffdc_filename: 4: aDebug.o
index: 2 str .\aDebug.o
index: 3 str .\aDebug.o|.\aDebug.o
ffdc_filename: 5: array_counter.cpp
index: 3 str .\array_counter.cpp
index: 4 str .\array_counter.cpp|.\array_counter.cpp
ffdc_filename: 6: array_counter.h
index: 4 str .\array_counter.h
index: 5 str .\array_counter.h|.\array_counter.h
ffdc_filename: 7: array_counter.o
index: 5 str .\array_counter.o
index: 6 str .\array_counter.o|.\array_counter.o
ffdc_filename: 8: list_directory.cpp
index: 6 str .\list_directory.cpp
index: 7 str .\list_directory.cpp|.\list_directory.cpp
ffdc_filename: 9: list_directory.h
index: 7 str .\list_directory.h
index: 8 str .\list_directory.h|.\list_directory.h
ffdc_filename: 10: list_directory.o
index: 8 str .\list_directory.o
index: 9 str .\list_directory.o|.\list_directory.o
ffdc_filename: 11: main_000.cpp
index: 9 str .\main_000.cpp
index: 10 str .\main_000.cpp|.\main_000.cpp
ffdc_filename: 12: main_000.exe
index: 10 str .\main_000.exe
index: 11 str .\main_000.exe|.\main_000.exe
ffdc_filename: 13: main_000.o
index: 11 str .\main_000.o
index: 12 str .\main_000.o|.\main_000.o
ffdc_filename: 14: Makefile
index: 12 str .\Makefile
index: 13 str .\Makefile|.\Makefile
ffdc_filename: 15: parse.cpp
index: 13 str .\parse.cpp
index: 14 str .\parse.cpp|.\parse.cpp
ffdc_filename: 16: parse.h
index: 14 str .\parse.h
index: 15 str .\parse.h|.\parse.h
ffdc_filename: 17: parse.o
index: 15 str .\parse.o
index: 16 str .\parse.o|.\parse.o
ffdc_filename: 18: php
index: 16 str .\php
index: 17 str .\php|.\php
filename: .
lpcstr_path: .\php\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 2: ClassLoader.php
index: 17 str .\php\ClassLoader.php
index: 18 str .\php\ClassLoader.php|.\php\ClassLoader.php
ffdc_filename: 3: ClassLoader.php_tmp.php
index: 18 str .\php\ClassLoader.php_tmp.php
index: 19 str .\php\ClassLoader.php_tmp.php|.\php\ClassLoader.php_tmp.php
ffdc_filename: 4: container
index: 19 str .\php\container
index: 20 str .\php\container|.\php\container
filename: .
lpcstr_path: .\php\container\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 5: img
index: 20 str .\php\img
index: 21 str .\php\img|.\php\img
filename: .
lpcstr_path: .\php\img\*
ffdc_filename: 0: .
skip away : .
ffdc_filename: 1: ..
skip away : ..
ffdc_filename: 19: php_analyzer.cpp
index: 21 str .\php_analyzer.cpp
index: 22 str .\php_analyzer.cpp|.\php_analyzer.cpp
ffdc_filename: 20: php_analyzer.h
index: 22 str .\php_analyzer.h
index: 23 str .\php_analyzer.h|.\php_analyzer.h
ffdc_filename: 21: php_analyzer.o
index: 23 str .\php_analyzer.o
index: 24 str .\php_analyzer.o|.\php_analyzer.o
ffdc_filename: 22: php_struct.cpp
index: 24 str .\php_struct.cpp
index: 25 str .\php_struct.cpp|.\php_struct.cpp
ffdc_filename: 23: php_struct.h
index: 25 str .\php_struct.h
index: 26 str .\php_struct.h|.\php_struct.h
ffdc_filename: 24: php_struct.o
index: 26 str .\php_struct.o
index: 27 str .\php_struct.o|.\php_struct.o
ffdc_filename: 25: Print.cpp
index: 27 str .\Print.cpp
index: 28 str .\Print.cpp|.\Print.cpp
ffdc_filename: 26: Print.h
index: 28 str .\Print.h
index: 29 str .\Print.h|.\Print.h
ffdc_filename: 27: Print.o
index: 29 str .\Print.o
index: 30 str .\Print.o|.\Print.o
ffdc_filename: 28: specification.txt
index: 30 str .\specification.txt
index: 31 str .\specification.txt|.\specification.txt
ffdc_filename: 29: tmp-specification.txt
index: 31 str .\tmp-specification.txt
index: 32 str .\tmp-specification.txt|.\tmp-specification.txt
list_dummy_ary[0]=.\aDebug.cpp
list_dummy_ary[1]=.\aDebug.h
list_dummy_ary[2]=.\aDebug.o
list_dummy_ary[3]=.\array_counter.cpp
list_dummy_ary[4]=.\array_counter.h
list_dummy_ary[5]=.\array_counter.o
list_dummy_ary[6]=.\list_directory.cpp
list_dummy_ary[7]=.\list_directory.h
list_dummy_ary[8]=.\list_directory.o
list_dummy_ary[9]=.\main_000.cpp
list_dummy_ary[10]=.\main_000.exe
list_dummy_ary[11]=.\main_000.o
list_dummy_ary[12]=.\Makefile
list_dummy_ary[13]=.\parse.cpp
list_dummy_ary[14]=.\parse.h
list_dummy_ary[15]=.\parse.o
list_dummy_ary[16]=.\php
list_dummy_ary[17]=.\php\ClassLoader.php
list_dummy_ary[18]=.\php\ClassLoader.php_tmp.php
list_dummy_ary[19]=.\php\container
list_dummy_ary[20]=.\php\img
list_dummy_ary[21]=.\php_analyzer.cpp
list_dummy_ary[22]=.\php_analyzer.h
list_dummy_ary[23]=.\php_analyzer.o
list_dummy_ary[24]=.\php_struct.cpp
list_dummy_ary[25]=.\php_struct.h
list_dummy_ary[26]=.\php_struct.o
list_dummy_ary[27]=.\Print.cpp
list_dummy_ary[28]=.\Print.h
list_dummy_ary[29]=.\Print.o
list_dummy_ary[30]=.\specification.txt
list_dummy_ary[31]=.\tmp-specification.txt