Avatar billede montago Praktikant
10. august 2006 - 12:41 Der er 6 kommentarer og
2 løsninger

Funktion som returnere størrelse på fil / eller andre data

Jeg leder efter et godt eksempel på brugen af "WIN32_FIND_DATA" som jeg indtil videre mener at være den bedste måde at finde data om en fil...

Jeg er interesseret i:

1. En funktion som returnere filstørrelsen i 'bytes' (LONG, DOUBLE, UNSIGNED INT eller lign)

2. En funktion som returnere 'Date Last Modified' (DOUBLE format: YYYYMMDDhhmmss)


Funktionen skal fodre med en relativ sti: f.eks

double filesize = file_lastmodi("GameData\\Teams\\GTC-65\\Ferrari 275 GTB\\401\\401_CPIT_ULTRA_TEX.gtl")

NB. jeg kan lave stien om, sådan at "/" bruges i stedet, samt en char*

pfh. tak
Avatar billede montago Praktikant
10. august 2006 - 12:43 #1
hehe... mit fodrings eksempel er selvfølgelig:

double filesize = file_size("GameData\\Teams\\GTC-65\\Ferrari 275 GTB\\401\\401_CPIT_ULTRA_TEX.gtl")

double fileModi = file_lastmodi("GameData\\Teams\\GTC-65\\Ferrari 275 GTB\\401\\401_CPIT_ULTRA_TEX.gtl")
Avatar billede arne_v Ekspert
10. august 2006 - 13:43 #2
jeg vil foreslå stat - den er noget nemmere at kalde
Avatar billede montago Praktikant
10. august 2006 - 13:54 #3
jeg fant :

double FileSize(string path)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;

    //printf ("Target file is %s.\n", path.c_str());
    hFind = FindFirstFile(path.c_str(), &FindFileData);

    if (hFind == INVALID_HANDLE_VALUE)
    {
        //printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
        return (0);
    }
    else
    {
        /*printf ("The first file found is %s - %f\n",
        FindFileData.cFileName, FindFileData.nFileSizeLow);*/
        FindClose(hFind);
        return FindFileData.nFileSizeLow;
    }
}
Avatar billede montago Praktikant
10. august 2006 - 13:55 #4
nu mangler jeg blot dato'en... som er 64bit, *sig*
Avatar billede montago Praktikant
10. august 2006 - 13:56 #5
kunne godt bruge lidt hjælp til datoen...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/retrieving_the_last_write_time.asp

#include <windows.h>

// GetLastWriteTime - Retrieves the last-write time and converts
//                    the time to a string
//
// Return value - TRUE if successful, FALSE otherwise
// hFile      - Valid file handle
// lpszString - Pointer to buffer to receive string

BOOL GetLastWriteTime(HANDLE hFile, LPTSTR lpszString)
{
    FILETIME ftCreate, ftAccess, ftWrite;
    SYSTEMTIME stUTC, stLocal;

    // Retrieve the file times for the file.
    if (!GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite))
        return FALSE;

    // Convert the last-write time to local time.
    FileTimeToSystemTime(&ftWrite, &stUTC);
    SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);

    // Build a string showing the date and time.
    wsprintf(lpszString, TEXT("%02d/%02d/%d  %02d:%02d"),
        stLocal.wMonth, stLocal.wDay, stLocal.wYear,
        stLocal.wHour, stLocal.wMinute);

    return TRUE;
}
Avatar billede montago Praktikant
10. august 2006 - 14:02 #6
jeg kalder funktionen med :

char* FileLastModi(string path)
{
    char* out;
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;

    //printf ("Target file is %s.\n", path.c_str());
    hFind = FindFirstFile(path.c_str(), &FindFileData);

    if (hFind == INVALID_HANDLE_VALUE){ return ("1");    }
    else{
        //FindFileData.ftLastWriteTime
        GetLastWriteTime(hFind, out);

        return (out);
    }
}
Avatar billede montago Praktikant
10. august 2006 - 14:42 #7
Og Tids funktionen... uden WIN32_FIND_DATA

string FileLastModi(string path)
{
    struct _stat buf;
    int result;
    char buffer[] = "A line to output";

    result = _stat( path.c_str() , &buf );

    if( result != 0 )
        perror( "Problem getting information" );
    else{
        char tmpbuf[128];
        struct tm *today;
        today = localtime( &buf.st_atime );
        strftime( tmpbuf, 128,"%Y%m%d%H%M%S", today );
        printf( tmpbuf );

        //printf( "Time modified : %s", ctime( &buf.st_atime ) );
    }

    return "1";

}
Avatar billede montago Praktikant
10. august 2006 - 14:43 #8
tids funktionen skal dog lige modificeres... poster svaret senere..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester