获取软链接文件的大小

本文关键字:文件 软链接 获取 | 更新日期: 2023-09-27 18:12:03

我正在寻找一种简单的方法来获取软链接文件的大小。

FileInfo类每次返回0字节。

我怎样才能得到真正的文件大小?

获取软链接文件的大小

适用于symlinks:

long thisFileSize;
using (Stream thisFileStream = File.OpenRead(fullPathToFile))
    thisFileSize = thisFileStream.Length;

查看此链接http://blogs.msdn.com/b/oldnewthing/archive/2010/02/12/9962359.aspx

像GetFileAttributes和FindFirstFile这样的函数,当被要求时提供有关符号链接的信息,返回有关的信息链接本身,而不是链接目的地。如果你使用FindFirstFile函数,您可以知道您有一个符号链接因为文件属性将具有FILE_ATTRIBUTES_REPARSE_POINT标志集,以及dwReserved0成员将包含特殊值IO_REPARSE_TAG_SYMLINK。

很好,现在我知道我有一个符号链接,但是如果我想要关于链接目标的信息呢?

例如,我想知道链接目标的大小、最后修改时间和名称。来这样做,就打开了符号链接。I/O管理器取消对符号链接,并提供链接目的地的句柄。你可以然后调用GetFileSize、GetFileInformationByHandleEx或GetFinalPathNameByHandle获取符号链接的信息目标。

下面是demo http://www.codeproject.com/KB/vista/ReparsePointID.aspx
的实际代码

您需要打开文件并通过GetFileSize函数了解其大小

这是我的方法,添加了FileShare参数,即使文件正在使用,仍然可以打开获取长度

using var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
size = fs.Length;
fs.Close();