You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C# .NET Core跨平台获取磁盘文件大小解决方案

获取文件大小:Linux实现与跨平台思路

首先直接回应你的问题:当然有办法在Linux下获取文件大小,而且也存在跨操作系统的通用逻辑——关键是使用操作系统无关的标准API或者编程语言自带的跨平台工具库。下面分两部分给你说明:

一、Linux系统下的实现方案

根据你使用的编程语言,这里给几个最常用的实用例子:

1. C/C++(原生系统调用)

Linux遵循POSIX标准,你可以用stat()fstat()函数获取文件元数据,其中就包含文件大小:

#include <stdio.h>
#include <sys/stat.h>

long get_file_size(const char *filepath) {
    struct stat file_stat;
    if (stat(filepath, &file_stat) == -1) {
        perror("Failed to get file stats");
        return -1;
    }
    return file_stat.st_size; // 返回字节数
}

int main() {
    const char *path = "/path/to/your/file";
    long size = get_file_size(path);
    if (size != -1) {
        printf("File size: %ld bytes\n", size);
    }
    return 0;
}

stat()通过文件路径获取信息,fstat()则针对已打开的文件描述符,适合你已经打开文件的场景。

2. Python(简单跨平台)

Python的标准库os模块提供了开箱即用的跨平台方法,在Linux下直接可用:

import os

try:
    size = os.path.getsize("/path/to/your/file")
    print(f"File size: {size} bytes")
except OSError as e:
    print(f"Error getting file size: {e}")

或者用os.stat()获取更完整的文件信息:

import os

file_stat = os.stat("/path/to/your/file")
print(f"File size: {file_stat.st_size} bytes")

3. Shell脚本

如果是写Shell脚本,最可靠的方式是用stat命令(避免解析ls输出,因为格式可能随环境变化):

# 获取文件字节数
file_size=$(stat -c %s "/path/to/your/file")
echo "File size: $file_size bytes"

二、跨平台通用逻辑的思路

如果你想要一套代码同时支持Windows和Linux,优先选择编程语言自带的跨平台API,而非直接调用系统原生函数:

  • 对于C/C++:可以使用C++17及以上标准的std::filesystem,它是完全跨平台的:
    #include <filesystem>
    #include <iostream>
    
    namespace fs = std::filesystem;
    
    int main() {
        fs::path file_path = "/path/to/your/file";
        try {
            uintmax_t size = fs::file_size(file_path);
            std::cout << "File size: " << size << " bytes\n";
        } catch (const fs::filesystem_error& e) {
            std::cerr << "Error: " << e.what() << '\n';
        }
        return 0;
    }
    
  • 对于Java:使用java.io.File.length()或者java.nio.file.Files.size()
  • 对于Python:前面提到的os.path.getsize()本身就是跨平台的,Windows下也能正常运行

为什么你的Windows代码在Linux失效?

Windows下通常用Win32 API(比如GetFileSize()GetFileSizeEx())或者适配Windows的_stat(),这些接口要么是Windows独有的,要么在Linux下的参数、行为有差异,直接移植自然会失效。改用POSIX标准接口或跨平台库就能解决这个问题。

内容的提问来源于stack exchange,提问作者Pierre Roudaut

火山引擎 最新活动