我正在努力使自己成为一个小版本控制服务。
我希望有一个监控文件夹的程序,当添加新文件时,它会重命名该新文件。
我已经完成了上述功能,但是我需要为该功能指定一个文件名。
我希望它重命名文件,无论它当前被调用什么。
例如,我拖动一个名为“this is the final copy.png”的文件,它会将其重命名为v1.png,下一个文件名为“finalfinaltheend.png”,它将被重命名为v2。 PNG。这是我到目前为止所做的:
目前,当我在文件夹中拖动一个新文件时,它将搜索所有文件并查找我指定的字符串并进行更改。我想让它顺序重命名文件,无论文件名移动到文件夹时是什么。
private void button1_Click(object sender, EventArgs e)
{
watch();
}
private void watch()
{
var path = @"C:\Users\jmorrish\Desktop\New folder\New folder";
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
DirectoryInfo d = new DirectoryInfo(@"C:\Users\jmorrish\Desktop\New folder\New folder");
FileInfo[] infos = d.GetFiles();
foreach (FileInfo f in infos)
{
File.Move(f.FullName, f.FullName.Replace("I have been renamed", "123"));
}
}
答案 0 :(得分:1)
每次调用OnChanged方法时都会枚举每个文件,但是你应该使用(FileSystemEventArgs e)。
https://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs(v=vs.110).aspx
FileSystemEventArgs提供ChangeType,FullPath和Name属性,可帮助您获取修改后的文件信息。因此,您只需重命名要修改的文件,而不是遍历整个文件夹。
private void OnChanged(object source, FileSystemEventArgs e)
{
File.Move(e.FullPath, e.FullPath.Replace(e.Name, $"123{Path.GetExtension(e.Name)}"));
}
您也应该查看Path类,在那里您会发现许多常用操作来处理路径,文件名,扩展名等。https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx