Моя программа не может File.Move
или File.Delete
файл, потому что он используется "другим процессом", но на самом деле его использует моя собственная программа.
Я использую Directory.GetFiles
для первоначального получения путей к файлам, и оттуда я обрабатываю файлы, просто просматривая их имена и обрабатывая информацию таким образом. Следовательно, все, что я делаю, это работаю с самими строками, верно? После этого я пытаюсь переместить файлы в каталог «Обработано». Почти все они обычно перемещаются, но время от времени они просто не двигаются, потому что они используются моей программой.
Почему большинство из них движутся, но один или два остаются здесь? Могу ли я что-нибудь сделать, чтобы освободить файл? Там нет потоков, чтобы закрыть.
Редактировать Вот код:
public object[] UnzipFiles(string[] zipFiles)
{
ArrayList al = new ArrayList(); //not sure of proper array size, so using arraylist
string[] files = null;
for (int a = 0; a < zipFiles.Length; a++)
{
string destination = settings.GetTorrentSaveFolder() + @"\[CSL]--Temp\" + Path.GetFileNameWithoutExtension(zipFiles[a]) + @"\";
try
{
fz.ExtractZip(zipFiles[a], destination, ".torrent");
files = Directory.GetFiles(destination,
"*.torrent", SearchOption.AllDirectories);
for (int b = 0; b < files.Length; b++)
al.Add(files[b]);
}
catch(Exception e)
{}
}
try
{
return al.ToArray(); //return all files of all zips
}
catch (Exception e)
{
return null;
}
}
Это называется из:
try
{
object[] rawFiles = directory.UnzipFiles(zipFiles);
string[] files = Array.ConvertAll<object, string>(rawFiles, Convert.ToString);
if (files != null)
{
torrents = builder.Build(files);
xml.AddTorrents(torrents);
directory.MoveProcessedFiles(xml);
directory.MoveProcessedZipFiles();
}
}
catch (Exception e)
{ }
Поэтому строитель строит объекты класса Torrent. Затем я добавляю объекты класса Torrent в xml-файл, в котором хранится информация о нем, и затем пытаюсь переместить обработанные файлы, использующие xml-файл, в качестве справки о том, где находится каждый файл.
Несмотря на то, что для большинства файлов все работает нормально, я получу IOException о том, что он в конечном итоге используется другим процессом:
public void MoveProcessedZipFiles()
{
string[] zipFiles = Directory.GetFiles(settings.GetTorrentSaveFolder(), "*.zip", SearchOption.TopDirectoryOnly);
if (!Directory.Exists(settings.GetTorrentSaveFolder() + @"\[CSL] -- Processed Zips"))
Directory.CreateDirectory(settings.GetTorrentSaveFolder() + @"\[CSL] -- Processed Zips");
for (int a = 0; a < zipFiles.Length; a++)
{
try
{
File.Move(zipFiles[a], settings.GetTorrentSaveFolder() + @"\[CSL] -- Processed Zips\" + zipFiles[a].Substring(zipFiles[a].LastIndexOf('\\') + 1));
}
catch (Exception e)
{
}
}
}