修正 SubManager 的一个 bug

目前最好的字幕下载工具是爱页工作室SubManager 字幕管理器。程序通过射手网开放的API自批量动下载电影对应的字幕,省去逐个找字幕的麻烦。其工作原理与射手播放器一致,但有十余项增强。

SubManager 字幕管理器

目前它的最新版是 v2013.7.2,我在使用过程中发现一个问题:

当搜索目录中含有扩展名为空的文件时,程序出现异常:

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.ArgumentException: 字符串的长度不能为零。
参数名: oldValue
   在 System.String.Replace(String oldValue, String newValue)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir, String[] fileList)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir, String[] fileList)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir, String[] fileList)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir, String[] fileList)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir, String[] fileList)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir, String[] fileList)
   在 ShooterDownloader.DownloadForm.PopulateFileList(String dir)
   在 ShooterDownloader.DownloadForm.txtDir_KeyUp(Object sender, KeyEventArgs e)
   在 System.Windows.Forms.Control.OnKeyUp(KeyEventArgs e)
   在 System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
   在 System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
   在 System.Windows.Forms.Control.WmKeyChar(Message& m)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.TextBoxBase.WndProc(Message& m)
   在 System.Windows.Forms.TextBox.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Reflector 将 SubManager.exe 反编译,得到它的源代码,定位到 DownloadFormPopulateFileList(String, String[]) : Void 方法。其中只有一行用到 String.Replace() 方法:

if ((File.Exists(info.FullName.Replace(info.Extension, ".srt")) || File.Exists(info.FullName.Replace(info.Extension, ".ass"))) || (File.Exists(info.FullName.Replace(info.Extension, ".ssa")) || File.Exists(info.FullName.Replace(info.Extension, ".smi"))))

把它改为:

if (string.IsNullOrEmpty(info.Extension) || (File.Exists(info.FullName.Replace(info.Extension, ".srt")) || File.Exists(info.FullName.Replace(info.Extension, ".ass"))) || (File.Exists(info.FullName.Replace(info.Extension, ".ssa")) || File.Exists(info.FullName.Replace(info.Extension, ".smi"))))

并重新编译,该错误提示消失了。

我联系了作者 ayeah,他表示将在下一个版本修复。

评论