重命名文件夹中的文件,忽略当前文件名
Rename files in folder, ignoring current file name
我正在努力使自己成为一个小型版本控制服务。
我想要一个监视文件夹的程序,当添加新文件时,它会重命名该新文件。
我已经使上述功能正常工作,但是我需要为该功能指定一个文件名才能正常工作。
我希望它重命名文件,而不管它当前叫什么。
例如,我拖入一个名为:"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"));
}
}
每次调用 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 class,在那里您会发现许多用于处理路径、文件名、扩展名等的常用操作。https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx
我正在努力使自己成为一个小型版本控制服务。
我想要一个监视文件夹的程序,当添加新文件时,它会重命名该新文件。
我已经使上述功能正常工作,但是我需要为该功能指定一个文件名才能正常工作。
我希望它重命名文件,而不管它当前叫什么。
例如,我拖入一个名为:"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"));
}
}
每次调用 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 class,在那里您会发现许多用于处理路径、文件名、扩展名等的常用操作。https://msdn.microsoft.com/en-us/library/system.io.path(v=vs.110).aspx