اندی پیش به این فکر میکردم که چطور میتوانم حجم یک پرونده را بدست بیاورم و زیر کاپوت این توابع چه چیزی پنهان است.
برای بدست آوردن حجم یک پرونده، البته بدون توجه به فایلسیستم و سیستمعامل میتوانیم به این صورت عمل کنیم: اول پرونده را باز میکنیم، سپس اشارهگر پرونده را به آخرین بایت آن انتقال میدهیم(معمولا تابعی به اسم seek یا مشابه وجود دارد)، حالا مکان اشارهگر را نسبت به اول پرونده بدست میآوریم(معمولا تابعی به اسم tell وجود دارد). حجم پرونده را به بایت بدست آوردهایم.
کد سی:
#include <stdio.h>
int main(){
char *filename = "/tmp/afile";
FILE *f;
f = fopen(filename, "rt");
fseek(f, 0, SEEK_END);
int size = ftell(f);
printf("File size in bytes: %d\n", size);
}
فکر میکنم همه چیز مشخص باشد.
کد پایتون:
filename = "/tmp/afile"
with open(filename) as f:
size = f.seek(0, 2)
print("File size in bytes:", size)
در پایتون زمانی که با تابع seek اشارهگر را جابجا میکنیم، خود تابع seek مکان مطلق اشارهگر را نیز برمیگرداند و نیازی به صدا زدن تابع tell نیست.در ضمن ۲ به معنی SEEK_END است.
کد پرل:
$filename = "/tmp/afile"; open(f, '<', $filename); seek(f, 0, 2); $size = tell(f); print("File size in bytes: ", $size, "\n");
اینجا نیز ۲ به معنی SEEK_END میباشد.