簡體   English   中英

C - 來自絕對路徑的文件大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM