[英]C - size of a file from an absolute path
問題:當相對於當前工作目錄的文件路徑未知時,是否有一種方法可以使用絕對文件路徑獲取文件大小為off_t
這很可能被標記為重復,但我相信它的問題,如充分瓦里斯這還是這個 ,因為我不希望使用相對路徑。
像許多民間一樣 - 出現 - 我陷入了陷阱,假設在尋找獲取文件信息時stat()
使用絕對而不是相對 (對當前工作目錄)路徑名。 我有一個文件的絕對路徑,我需要將其標識為off_t
。 我發現的第二個問題是絕對路徑名 - 除了指向錯誤的位置 - 也可能超出來自limits.h
PATH_MAX
。
在此處找到的函數提供了一種獲取具有相對路徑的off_t
的方法。 但是這顯然會通過errno返回No such file or directory
的絕對路徑,因為它使用stat()
。
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
fprintf(stderr, "Cannot determine size of %s: %s\n",
filename, strerror(errno));
return -1;
}
因為我知道有人會問; 我被告知chdir()
既不是線程安全也不是良好的做法; 我應該避免更改當前的工作目錄。 我也被建議避開fseek()
但沒有理由說明為什么..
stat(2)允許您從當前目錄使用根目錄中的完整路徑名(如果路徑以/
開頭)或相對路徑(否則請參閱path_resolution(7) )指定文件。 即使您不知道任何名稱(如果您只有一個打開的文件描述符,並且您不知道該文件的名稱),您也可以進行fstat(2)
系統調用。
請注意,文件大小可以在您調用的stat(2)
調用之間發生變化,以了解文件大小和您之后可以執行的操作。 如果你想確保你的寫作不會與其他人O_APPEND
在一起,可以考慮用O_APPEND
標志打開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.