問題:有沒有獲得一個文件的大小爲off_t
與絕對文件路徑時,文件路徑相對到當前的工作目錄是不知道手段c - 從中絕對路徑的文件的大小
這很可能被標記爲重複,但我相信它從諸如this或this這樣的問題中充分變化,因爲我不想使用相對路徑。
像許多民間-IT appears-我掉進假設希望獲得文件信息stat()
時使用相對(當前工作目錄)的路徑名絕對而非的陷阱。我有一個文件的絕對路徑,我需要確定off_t
的大小。我發現的第二個問題是,絕對路徑名稱(除了指向錯誤的地方)也可能從limits.h
?以上超過PATH_MAX
。
下面找到的函數here提供了一種獲取具有相對路徑的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()'確實可以用絕對路徑工作! – 3442
用'chdir()'設置的當前目錄就像一個全局變量,在線程之間共享並影響所有使用路徑名的線程的系統調用。出於這個原因,我同意你應該在程序啓動之前初始化一次,然後再產生線程。 'fseek()':我同意你不應該在沒有必要的時候使用它(並且使用它是很少合理的)。並非所有類型的流支持尋求!通過不使用查找操作,您的流用戶代碼變得更加通用,並且可以用於更多種類的流。例如,套接字是不可查找的流。 – pasztorpisti
啊......我非常困惑。 – Chortle