Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#修改file.txt后,将副本保存到存档文件夹_C#_File_Path_Copy_Backup - Fatal编程技术网

C#修改file.txt后,将副本保存到存档文件夹

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

如何识别文件何时被修改。如果文件被修改,每次保存一份副本到“存档”文件夹。文件名将递增:文件(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 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的一个重要部分。如果没有代码可供帮助,我们如何帮助您使用代码?如果你有代码,请分享!()=>这缺少一条关键信息。从什么时候开始修改的?自从上次阅读以来?