C#修改file.txt后,将副本保存到存档文件夹
如何识别文件何时被修改。如果文件被修改,每次保存一份副本到“存档”文件夹。文件名将递增:文件(1).txt,文件(2).txt 下面的代码在2上停止增量C#修改file.txt后,将副本保存到存档文件夹,c#,file,path,copy,backup,C#,File,Path,Copy,Backup,如何识别文件何时被修改。如果文件被修改,每次保存一份副本到“存档”文件夹。文件名将递增:文件(1).txt,文件(2).txt 下面的代码在2上停止增量 FileInfo fileSettings = new FileInfo(@"c:\path\file.txt"); string archive = @"C:\Users\Desktop\archive\";` if ( fileSettings.LastWriteTime > DateTime.Today ) { int cou
FileInfo fileSettings = new FileInfo(@"c:\path\file.txt");
string archive = @"C:\Users\Desktop\archive\";`
if ( fileSettings.LastWriteTime > DateTime.Today )
{
int count = 1;
string woExtension = Path.GetFileNameWithoutExtension(@"c:\path\file.txt");
string extension = Path.GetExtension(@"c:\path\file.txt");
string tempFilename = string.Format("{0} ({1})", woExtension, count++);
fileSettings.CopyTo(Path.Combine(archive + tempFilename + extension));
}
看起来,您需要的是一种算法来复制文件名适当递增的文件。这会满足你的需求 假设这些是您的文件和归档目录名
var file = @"Data/A.txt";
var archive = @"Data/Archive";
我们看最后一次写入时间条件是否满足。如果是这样,我们将枚举目标目录中与原始文件模式匹配的所有文件。也就是说,它必须以A
开头,然后它可能有也可能没有(1)
等。因此,将枚举所有文件,例如A.txt
,A(1).txt
,A(2).txt
。然后我们按顺序得到这些文件中的最后一个(这里我们必须注意按长度排序,如果您只是按值排序,A.txt
将排在所有其他文件之后)。然后使用Regex
获得最后一个文件的编号、增量,并使用新名称复制文件
if (File.GetLastWriteTime(file) > DateTime.Today)
{
var fileNameOnly = Path.GetFileNameWithoutExtension(file);
var ext = Path.GetExtension(file);
var pattern = fileNameOnly + "*" + ext;
var lastCopy = Directory.EnumerateFiles(archive, pattern, System.IO.SearchOption.TopDirectoryOnly)
.OrderBy(x => x.Length)
.LastOrDefault();
var newName = fileNameOnly + ext;
if (lastCopy != null)
{
var lastCopyNameOnly = Path.GetFileNameWithoutExtension(lastCopy);
var match = Regex.Match(lastCopyNameOnly, @"(.+)\((\d+)\)");
int lastNum = 1;
if (match.Success)
{
int.TryParse(match.Groups[2].Value, out lastNum);
lastNum++;
}
newName = string.Format("{0}({1}){2}", fileNameOnly, lastNum, ext);
}
var dest = Path.Combine(archive, newName);
File.Copy(file, dest);
}
笔记
小心
var lastNum=1代码>初始化。您必须初始化为1
,而不是0
。因为如果match.Success==false
,这意味着目标中只有A.txt
文件,那么下一个文件将是A(1).txt
。如果您将其初始化为zero
,那么您的下一个文件将是A(0).txt
,这不是您想要的输出。在这里,它解释了为什么这个问题对于StackOverflow来说不是一个好问题。您已经表明,您自己没有做过任何研究或尝试,这是StackOverflow的一个重要部分。如果没有代码可供帮助,我们如何帮助您使用代码?如果你有代码,请分享!()=>这缺少一条关键信息。从什么时候开始修改的?自从上次阅读以来?