我使用以下内容来获取文件的大小
FileInfo(filePath).Length
当然有效。
文件路径类似于
Live\Sites\User\297387\XYZ - ABC
但是当文件重复时会出现问题
Live\Sites\User\297387\XYZ - ABC_2
有没有办法可以获得名称匹配的文件的最新版本
Live\Sites\User\297387\XYZ - ABC
所以我有以下文件
Live\Sites\User\297387\XYZ - ABC
Live\Sites\User\297387\XYZ - ABC_1
Live\Sites\User\297387\XYZ - ABC_2
我需要获得最新的匹配
Live\Sites\User\297387\XYZ - ABC
答案 0 :(得分:1)
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = " Live\Sites\User\297387\XYZ";
watcher.Changed += new FileSystemEventHandler(OnChanged);
private static void OnChanged(object source, FileSystemEventArgs e)
{
// Specify what is done when a file is changed, created, or deleted.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
答案 1 :(得分:1)
您可以使用Path
类和LINQ:
string fileName = Path.GetFileName(filePath);
string dir = Path.GetDirectoryName(filePath);
var latestFile = new DirectoryInfo(dir)
.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)
.Where(file => file.Name.StartsWith(fileName))
.OrderByDescending(file => file.LastAccessTime)
.First();
long len = latestFile.Length;
如果您不想查看上次访问时间但_
后面的数字,您可以使用此查询:
var latestFile = new DirectoryInfo(dir)
.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)
.Where(file => file.Name.StartsWith(fileName))
.Select(file =>
{
int index = file.Name.LastIndexOf('_');
string vStr = "0";
if(index >= 0)
vStr = file.Name.Substring(index + 1);
int version;
if(!int.TryParse(vStr, out version))
version = 0;
return new { file, version };
})
.OrderByDescending(xFile => xFile.version)
.Select(xFile => xFile.file)
.First();
答案 2 :(得分:1)
此LinQ查询获取目录中的最后一个文件:
var lastFile = (from a in directoryInfo.EnumerateFiles()
orderby a.CreationTime descending
select a).FirstOrDefault();
或
var lastFile = (from a in directoryInfo.EnumerateFiles()
orderby a.CreationTime
select a).LastOrDefault();
答案 3 :(得分:1)
这是我“最干净”的首选解决方案:
string regx = "file"; // replace this with your actual "base" file name
var f = Directory.EnumerateFiles("C:\\") // replace with your directory path
.Where(fn=>
System.Text.RegularExpressions.Regex.IsMatch(fn, regx, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
.Select(fn=>new FileInfo(fn))
.Aggregate( (f1,f2) => f1.LastWriteTime> f2.LastWriteTime? f1 : f2);
这将匹配C:\中包含word文件的所有文件 - 然后选择最近编写的文件。