|
|||||||
|
|
|
![]() |
|
|
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 18: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 18: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 13:51. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:07.

























