我有一个系统文件监视器监视用户在C#中的下载目录。该程序是一个Windows服务,每次找到一个已被删除或下载到下载目录的文件时,文件被移动到另一个目录。当服务正在运行时,下载尝试时,它将失败。 Chrome只是说Failed - Download error
,没有说明错误是什么。我只能假设我的Windows服务是通过观看它来锁定目录,所以没有任何东西可以下载到它。当Windows服务关闭时,我可以再次正常下载。我对C#很陌生,所以我不熟悉常见错误,但这是我的代码:
private void watch()
{
string pathUser = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
path = Path.Combine(pathUser, "Downloads");
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastWrite
| NotifyFilters.FileName;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
private void OnChanged(object source, FileSystemEventArgs e)
{
String pUser = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
String directoryName = Destination;
DirectoryInfo dirInfo = new DirectoryInfo(directoryName);
if (dirInfo.Exists == false)
Directory.CreateDirectory(directoryName);
List<String> MyFiles = Directory
.GetFiles(path, "*.*", SearchOption.AllDirectories).ToList();
foreach (string file in MyFiles)
{
FileInfo mFile = new FileInfo(file);
// to remove name collusion
if (new FileInfo(dirInfo + "\\" + mFile.Name).Exists == false)
{
bool flag = true;
while (flag)
{
if (!IsFileLocked(file, 1))
{
mFile.MoveTo(dirInfo + "\\" + mFile.Name);
flag = false;
}
}
}
}
}
更新 我尝试在移动之前过滤掉临时下载扩展,但我似乎仍然得到错误。这是我的尝试:
String[] ignoreExt = { "crdownload","download", "temp", "tmp"};
private void OnChanged(object source, FileSystemEventArgs e)
{
String pUser = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
String directoryName = Destination;
DirectoryInfo dirInfo = new DirectoryInfo(directoryName);
if (dirInfo.Exists == false)
Directory.CreateDirectory(directoryName);
List<String> MyFiles = Directory
.GetFiles(path, "*.*", SearchOption.AllDirectories).ToList();
foreach (string file in MyFiles)
{
FileInfo mFile = new FileInfo(file);
// to remove name collusion
if (new FileInfo(dirInfo + "\\" + mFile.Name).Exists == false)
{
bool flag = true;
while (flag)
{
if (!IsFileLocked(file, 1))
{
if (mFile.Extension != ignoreExt[0] || mFile.Extension != ignoreExt[1] || mFile.Extension != ignoreExt[2] || mFile.Extension != ignoreExt[3])
{
mFile.MoveTo(dirInfo + "\\" + mFile.Name);
// Clipboard.SetText(dirInfo + "\\" + mFile.Name);
flag = false;
}
}
}
}
}
}
答案 0 :(得分:5)
当您使用Chrome下载内容时,会创建一个Unconfirmed
文件,如下所示:Unconfirmed 50329.crdownload
我通过拖动此文件在我的系统上手动测试,结果 - &gt; Failed to Download - Error
我认为您的服务正在移动此文件,然后Chrome才能完成下载。
修改强>
对于Chrome下载文件的示例,您可以检查文件扩展名,如下所示:
if(mFile.Extension != "crdownload")
{
...
}
<强> EDIT2:强> 使用而不是Array a List:
List<String> ignoreExt = new List<String>() { "crdownload","download", "temp", "tmp"};
然后你可以检查你的扩展程序:
if (ignoreExt.Where(x => x == mFile.Extension).ToList().Count == 0)
{
mFile.MoveTo(dirInfo + "\\" + mFile.Name);
// Clipboard.SetText(dirInfo + "\\" + mFile.Name);
flag = false;
}
确保您是using System.Linq;
通过这种方式,你可以添加一些新的扩展,而不需要if无数的行;)