18 Kasım 2015 Çarşamba

Dosyanın Büyüklüğünü Bulma

Dosyanın Büyüklüğünü Bulma
Dosyanın büyüklüğü bulunurken dosyayla ilişkili metadata sonuca dahil edilmez. Metadata diskte ayrı bir alanda saklanmaktadır.

Java
File file = new File (path);
file.length ();  
C#
new FileInfo  (path).Length;
C
struct stat file;
stat("path"&file);
printf("%d",stat.st_size);
Burada dikkat edilmesi gereken nokta st_size alanının signed int olarak tanımlı olması.
Eğer dosya açılmış ise lseek ile de dosyanın büyüklüğü bulunabilir. lseek (long seek) anlamına geliyor.
// Get size.
off_t size = lseek(fd, 0, SEEK_END);
// Seek back to the beginning.
lseek(fd, 0, SEEK_SET);

QT
QFile newFile("C:/Users/testfile");
newFile.size();

Win32
Win32 zengin bir API sunuyor
.
GetFileSizeEx
Örnek ver

GetFileAttributesEx
Örnek ver

GetFileInformationByHandle
Eğer dosya başka bir uygulama tarafından kullanılıyorsa bile boyunu alabilmemizi sağlar.
ULONGLONG filesize = 0; 
HANDLE h = CreateFile(filename, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, 
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
if (h != INVALID_HANDLE_VALUE)
{ 
    BY_HANDLE_FILE_INFORMATION info;
    memset(&info, 0, sizeof(BY_HANDLE_FILE_INFORMATION));
    if (GetFileInformationByHandle(h, &info)) 
    { 
        ULARGE_INTEGER ul = { 0 };
        ul.LowPart = info.nFileSizeLow; 
        ul.HighPart = info.nFileSizeHigh;
        filesize = ul.QuadPart; 
    } 
    CloseHandle(h); 
} 
FindFirstFile
Şöyle yaparız.
WIN32_FIND_DATA ffd;
HANDLE hfind = FindFirstFile(filename, &ffd);
if (hfind != INVALID_HANDLE_VALUE)
{
    DWORD filesize = ffd.nFileSizeLow;

    //for files larger than 4GB:
    ULARGE_INTEGER ul;
    ul.LowPart = ffd.nFileSizeLow;
    ul.HighPart = ffd.nFileSizeHigh;
    ULONGLONG llfilesize = ul.QuadPart;

    FindClose(hfind);
}






Hiç yorum yok:

Yorum Gönder