C# VLC:端部移动文件
在Windows中,双击一个视频文件后,当它完成时,我希望该文件向上移动一个dir或2,并删除任何包含该文件的文件夹 我只希望这会影响位于C# VLC:端部移动文件,c#,visual-studio-2012,.net,vlc,libvlc,vlcj,C#,Visual Studio 2012,.net,Vlc,Libvlc,Vlcj,在Windows中,双击一个视频文件后,当它完成时,我希望该文件向上移动一个dir或2,并删除任何包含该文件的文件夹 我只希望这会影响位于C:\Users\User1\Downloads,例如%x%中的文件 有两种情况: 如果文件是%x%\Training.4273865.2013.avi,则应将其移动到。\view\ 如果文件是%x%\Showcase\SomeFile.mp4,则应将其移动到同一文件夹:。\..\viewsed\。然后应删除Showcase文件夹。目前,我必须先关闭VLC(以
C:\Users\User1\Downloads
,例如%x%
中的文件
有两种情况:
%x%\Training.4273865.2013.avi
,则应将其移动到。\view\
%x%\Showcase\SomeFile.mp4
,则应将其移动到同一文件夹:。\..\viewsed\
。然后应删除Showcase文件夹。目前,我必须先关闭VLC(以关闭文件句柄),然后才能删除Showcase
(及其其他内容)一个解决方案会很好,但我不介意使用任何语言或类似的开源编译器进行编译。您可以编写一个包装器,并将其与媒体文件关联起来 这将间接启动VLC,然后在关闭后移动文件 VLC将流列表作为参数,追加
vlc://quit
到播放列表的末尾,以自动退出VLC
用C#编写的包装器会更灵活,但这里有一个快速的批处理示例
set VLC=C:\Program Files\VideoLAN\VLC\vlc.exe
set FILE=Tig Notaro - Live.mp3
start "VLC" /WAIT "%VLC%" "%FILE%" vlc://quit
echo VLC has closed, I can move the file.
move "%FILE%" old/
pause
下面是一个示例C#应用程序,它可以满足您的要求。右键单击视频文件,选择“打开方式”,然后选择C#应用程序的可执行文件(您可以选中“始终使用所选程序打开此类文件”复选框,以使更改永久化),从而启动该程序
static void Main(字符串[]args)
{
如果(参数长度<1)
返回;
字符串vlc=@“C:\ProgramFiles\VideoLAN\vlc\vlc.exe”;
字符串videoFile=args[0];
字符串PathInfected=@“C:\Users\User1\Downloads”;
字符串destinationPath=System.IO.Directory.GetParent(PathInfected).FullName;
destinationPath=System.IO.Path.Combine(destinationPath,@“已查看\”);
流程vlcProcess=新流程();
vlcProcess.StartInfo.FileName=vlc;
vlcProcess.StartInfo.Arguments=“\”“+videoFile+”\”;
vlcProcess.StartInfo.Arguments+=“--播放并退出”;
vlcProcess.Start();
vlcProcess.WaitForExit();
如果(videoFile.IndexOf)(路径受影响,
StringComparison.InvariantCultureInogoreCase)>=0)
{
System.IO.File.Move(视频文件,
System.IO.Path.Combine(目标路径,
System.IO.Path.GetFileName(videoFile));
如果(IsubFolder)(路径受影响,
System.IO.Path.GetDirectoryName(视频文件)))
{
System.IO.Directory.Delete(
System.IO.Directory.GetParent(videoFile.FullName,true);
}
}
}
我在中找到了
IsSubfolder
的代码。谢谢您的回答!我知道我说过一个或多个解决方案是好的,但正如你所说,这个解决方案更灵活。谢谢你的努力!谢谢你的回答,我已经给你赏金了!一个问题:如果VLC真的播放了完整的视频并自愿退出,是否有办法只移动文件?事实上,如果我在视频中间关闭VLC,文件无论如何都会被移动。谢谢,谢谢你的赏金!我不知道VLC发出的信号表明它完成了整个视频。你可以试着把它作为一个单独的问题发布,看看有没有人知道答案。嘿,我最近一直在使用这个程序,所以非常感谢!只有一件事,当视频与其他文件在子目录中时,其他文件会被删除(很好),但目录本身不会被删除。当我尝试直接在Windows中手动删除它时,我遇到了一个文件句柄问题。大约3-5秒后,我可以删除子目录。我如何才能使您的解决方案充分发挥作用?有没有办法等待dir上的句柄被释放?还是先关上把手?谢谢
static void Main(string[] args)
{
if (args.Length < 1)
return;
string vlc = @"C:\Program Files\VideoLAN\VLC\vlc.exe";
string videoFile = args[0];
string pathAffected = @"C:\Users\User1\Downloads";
string destinationPath = System.IO.Directory.GetParent(pathAffected).FullName;
destinationPath = System.IO.Path.Combine(destinationPath, @"Viewed\");
Process vlcProcess = new Process();
vlcProcess.StartInfo.FileName = vlc;
vlcProcess.StartInfo.Arguments = "\"" + videoFile + "\"";
vlcProcess.StartInfo.Arguments += " --play-and-exit";
vlcProcess.Start();
vlcProcess.WaitForExit();
if (videoFile.IndexOf(pathAffected,
StringComparison.InvariantCultureIgnoreCase) >= 0)
{
System.IO.File.Move(videoFile,
System.IO.Path.Combine(destinationPath,
System.IO.Path.GetFileName(videoFile)));
if (IsSubfolder(pathAffected,
System.IO.Path.GetDirectoryName(videoFile)))
{
System.IO.Directory.Delete(
System.IO.Directory.GetParent(videoFile).FullName, true);
}
}
}