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




