|
|
|
![]() |
|
Strumenti |
![]() |
#41 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
No che figuraccia, non nasciamo tutti imparati(cit.).
Ecco un esempio: http://www.hwupgrade.it/forum/showpo...79&postcount=6 |
![]() |
![]() |
![]() |
#42 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ecco Sam, da qui puoi scaricare la libreria statica precompilata per Linux:
http://www.filedropper.com/libreaddirtar C'è la versione a 32 bit(X86), libreaddir32.a, e la versione a 64 bit(X86_64, AMD64), libreaddir64.a Per usarla: readdir.h Codice:
#ifndef MY_READDIR_H #define MY_READDIR_H void getDirInfo(char *dirName, uint64_t *pDim, int depth, void (*pfnOnChange)(const char *pathName, int depth, struct stat *statOut)); #endif /* MY_READDIR_H */ Codice:
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <unistd.h> #include "readdir.h" // gcc -O3 -m32 main.c libreaddir32.a -o readdir32 // gcc -O3 -m64 main.c libreaddir64.a -o readdir64 void OnChange(const char *pathName, int depth, struct stat *statOut) { if ( S_ISDIR(statOut->st_mode) ) printf("%*sDirectory: %s\n", (depth - 1) * 3, "", pathName); else printf("%*s%s\n", (depth - 1) * 3, "", pathName); } int main(int argc, char **argv) { uint64_t dim = 0; if(argc != 2) { fprintf(stdout, "uso: %s <dirpath>\n", argv[0]); fflush(stdout); return -1; } //getDirInfo(argv[1], &dim, 0, OnChange); getDirInfo(argv[1], &dim, 0, NULL); fprintf(stdout, "La dimensione della directory \"%s\" e' di %llu byte.\n", argv[1], (unsigned long long)dim); return 0; } Codice:
gcc -O3 -m32 main.c libreaddir32.a -o readdir32 Codice:
gcc -O3 -m64 main.c libreaddir64.a -o readdir64 Ultima modifica di Vincenzo1968 : 12-03-2013 alle 17:44. |
![]() |
![]() |
![]() |
#43 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ecco, Sam, da qui puoi scaricare le static library per Windows/Visual Studio 2012:
http://www.filedropper.com/libreaddir Uso: readdir.h Codice:
#ifndef MY_READDIR_H #define MY_READDIR_H #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <tchar.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h> #define ARRAY_SIZE(Array) (sizeof(Array) / sizeof((Array)[0])) // Dati usati dalla funzione DirWalkRecurse typedef struct { TCHAR szInitPath[_MAX_DIR]; // Path iniziale TCHAR szCurrPath[_MAX_DIR]; // Path corrente TCHAR szPathParent[_MAX_DIR]; // Path genitore di szCurrPath TCHAR szCurrDir[_MAX_DIR]; // Path temporaneo; ci servirà per la ricerca dei files int nDepth; // Profondità BOOL fRecurse; // impostare a TRUE per ottenere la scansione delle sottodirectory. TCHAR szBuf[1024]; // Buffer per l'output formattato int nIndent; // Contatore per l'indentazione BOOL fOk; // Loop control flag BOOL fIsDir; // Loop control flag WIN32_FIND_DATA FindData; // Informazioni sui file } DIRWALKDATA, *LPDIRWALKDATA; void getDirInfo(LPCTSTR pszRootPath, BOOL fRecurse, uint64_t *pDim, void (CALLBACK *pfnOnChange)(LPDIRWALKDATA)); #endif /* MY_READDIR_H */ Codice:
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <tchar.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h> #include "readdir.h" void CALLBACK OnChange(LPDIRWALKDATA pDW) { _tprintf(_TEXT("%s\n"), pDW->szBuf); } //int main(int argc, char* argv[]) int _tmain(int argc, TCHAR *argv[]) { uint64_t dim = 0; if( argc < 2 ) return -1; getDirInfo(argv[1], TRUE, &dim, OnChange); //getDirInfo(argv[1], TRUE, &dim, NULL); printf("\nLa dimensione della directory \"%s\" e': %llu byte\n", argv[1], (unsigned long long)dim); return 0; } ![]() Per la configurazione a 32 bit indica al linker la libreria a 32 bit: ![]() Per la configurazione a 64 bit indica al linker la libreria a 64 bit: ![]() Se invece usi una versione precedente di Visual Studio(2010?), bisogna ricompilare le librerie con quella versione. Visual Studio ![]() Ultima modifica di Vincenzo1968 : 12-03-2013 alle 17:43. |
![]() |
![]() |
![]() |
#44 |
Member
Iscritto dal: Jan 2013
Messaggi: 205
|
grazie mille!!
![]() |
![]() |
![]() |
![]() |
#45 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
![]() |
![]() |
![]() |
#46 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ecco le shared library per Linux:
http://www.filedropper.com/readdirsharedlibtar Uso: 32 bit: Codice:
gcc -O3 -m32 -L. -lreaddir32 main.c -o readdir32 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. ./readdir32 ~/Contest19 Codice:
gcc -O3 -m64 -L. -lreaddir64 main.c -o readdir64 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. ./readdir64 ~/Contest19 ![]() readdir.h Codice:
#ifndef MY_READDIR_H #define MY_READDIR_H #if defined _WIN32 || defined __CYGWIN__ #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif #else #if __GNUC__ >= 4 #define MYDLL_API __attribute__ ((visibility ("default"))) #else #define MYDLL_API #endif #endif #ifdef __cplusplus extern "C" { #endif MYDLL_API void getDirInfo(char *dirName, uint64_t *pDim, int depth, void (*pfnOnChange)(const char *pathName, int depth, struct stat *statOut)); #ifdef __cplusplus } #endif #endif /* MY_READDIR_H */ Codice:
#include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <unistd.h> #include "readdir.h" void OnChange(const char *pathName, int depth, struct stat *statOut) { if ( S_ISDIR(statOut->st_mode) ) printf("%*sDirectory: %s\n", (depth - 1) * 3, "", pathName); else printf("%*s%s\n", (depth - 1) * 3, "", pathName); } int main(int argc, char **argv) { uint64_t dim = 0; if(argc != 2) { fprintf(stdout, "uso: %s <dirpath>\n", argv[0]); fflush(stdout); return -1; } getDirInfo(argv[1], &dim, 0, OnChange); //getDirInfo(argv[1], &dim, 0, NULL); fprintf(stdout, "La dimensione della directory \"%s\" e' di %llu byte.\n", argv[1], (unsigned long long)dim); return 0; } |
![]() |
![]() |
![]() |
#47 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ecco le dll per Windows:
http://www.filedropper.com/libreaddirwinnew Uso: readdir.h Codice:
#ifndef MY_READDIR_H #define MY_READDIR_H #if defined _WIN32 || defined __CYGWIN__ #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif #else #if __GNUC__ >= 4 #define MYDLL_API __attribute__ ((visibility ("default"))) #else #define MYDLL_API #endif #endif #define ARRAY_SIZE(Array) (sizeof(Array) / sizeof((Array)[0])) #ifdef __cplusplus extern "C" { #endif // Dati usati dalla funzione DirWalkRecurse typedef struct { TCHAR szInitPath[_MAX_DIR]; // Path iniziale TCHAR szCurrPath[_MAX_DIR]; // Path corrente TCHAR szPathParent[_MAX_DIR]; // Path genitore di szCurrPath TCHAR szCurrDir[_MAX_DIR]; // Path temporaneo; ci servirà per la ricerca dei files int nDepth; // Profondità BOOL fRecurse; // impostare a TRUE per ottenere la scansione delle sottodirectory. TCHAR szBuf[1024]; // Buffer per l'output formattato int nIndent; // Contatore per l'indentazione BOOL fOk; // Loop control flag BOOL fIsDir; // Loop control flag WIN32_FIND_DATA FindData; // Informazioni sui file } DIRWALKDATA, *LPDIRWALKDATA; MYDLL_API void getDirInfo(LPCTSTR pszRootPath, BOOL fRecurse, uint64_t *pDim, void (CALLBACK *pfnOnChange)(LPDIRWALKDATA)); #ifdef __cplusplus } #endif #endif /* MY_READDIR_H */ Codice:
#define WIN32_LEAN_AND_MEAN #include <windows.h> #include <tchar.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h> #include "readdir.h" void CALLBACK OnChange(LPDIRWALKDATA pDW) { _tprintf(_TEXT("%s\n"), pDW->szBuf); } //int main(int argc, char* argv[]) int _tmain(int argc, TCHAR *argv[]) { uint64_t dim = 0; if( argc < 2 ) return -1; getDirInfo(argv[1], TRUE, &dim, OnChange); printf("\nLa dimensione della directory \"%s\" e': %llu byte\n", argv[1], (unsigned long long)dim); return 0; } 32 bit: ![]() 64 bit ![]() Ricordati di piazzare la dll nella stessa cartella dell'eseguibile o nella cartella di sistema, solitamente "C:\Windows\System32". Ultima modifica di Vincenzo1968 : 13-03-2013 alle 12:51. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:21.