ftruncate(改變檔案大小)
定義函式 intftruncate(int fd,off_t length);
函式說明
ftruncate()會將引數fd指定的檔案大小改為引數length指定的大小。
引數fd為已開啟的
檔案描述詞,而且必須是以寫入模式開啟的檔案。
如果原來的檔案大小比引數length大,則超過的部分會被刪去。
返回值執行成功則返回0,失敗返回-1,錯誤原因存於
errno。
錯誤**
ebadf 引數fd檔案描述詞為無效的或該檔案已關閉。
einval 引數fd 為一socket 並非檔案,或是該檔案並非以寫入模式開啟。
今天用 ftruncate 截斷檔案, 但怎麼都不能達到預料的效果, 截斷後檔案中的內容比較雜, 而且檔案大小也保持原來的.
新增 fflush() 和 rewind() 後ok.
以下是測試**:
[cpp]view plain
copy
#include
#include
#include
int main()
for(i=0; i<1000; i++)
fflush(fp);
fd = fileno(fp);
if(ftruncate(fd, 0)<0)
rewind(fp);
fprintf(fp, "end\n");
fclose(fp);
return 0;
}
程式執行後, tmp 檔案的內容為 end , 大小為4位元組.
- - - - - - - - - -
在呼叫 ftruncate() 前用 rewind() 也行.
但用 ftruncate()截斷過的檔案, 在用 fread, fwrite拷貝到另外乙個檔案時, 會出現亂碼和一些'\0'字元. 改用 fgets 和 fputs 則正常.
ftruncate(改變檔案大小)
ftruncate 改變檔案大小 定義函式 intftruncate int fd,off t length 函式說明 ftruncate 會將引數fd指定的檔案大小改為引數length指定的大小。引數fd為已開啟的檔案描述詞,而且必須是以寫入模式開啟的檔案。如果原來的檔案大小比引數length大,...
檔案大小換算
1千吉位元組 tb,terabyte 1024吉位元組 2的40次方位元組 1tb 1024gb 1吉位元組 gb,gigabyte 1024兆位元組 2的30次方位元組 1gb 1024mb 1兆位元組 mb,megabyte 1024千位元組 2的20次方位元組 1mb 1024kb 1千位元組...
獲取檔案大小
1 找到檔案所在的絕對路徑。系統路徑 projectpath request.getsession getservletcontext getrealpath 檔案路徑 在上傳檔案的時候,一定會有檔案相對路徑,如果不清楚,可以打斷點然後在本地找到此檔案。檔案相對路徑 filepath 絕對路徑rea...