C# Невозможно удалить файлы после преобразования с помощью командной строки Ghostscript [дубликат] ⇐ C#
C# Невозможно удалить файлы после преобразования с помощью командной строки Ghostscript [дубликат]
Я разрабатываю класс для преобразования PDF-файла в массив System.Bitmap[] с помощью Ghostscript. Насколько я знаю, Ghostscript ограничен командной строкой, поэтому я запускаю его как процесс. Все работает нормально, код генерирует изображение типа jpg для каждой страницы. После этого я создаю список растровых изображений и клонирую его. Теперь, когда я закончу, я хочу удалить сгенерированные файлы. Это невозможно, так как собственный процесс все равно блокирует его. Ошибка возникает в цикле, который я отметил /*Удалить файлы после преобразования*/.
Кто-нибудь знает, как разблокировать файлы перед удалением?
Пожалуйста, найдите мой код ниже:
public static System.Drawing.Bitmap[] PDF2Images(строка Имя файла, строка Tempfolder, строка GSExecutable, разрешение int){ System.Collections.Generic.List lstBMP = новый System.Collections.Generic.List(); /*Удалить все файлы jpg во временной папке*/ foreach (строка str в System.IO.Directory.GetFiles(Tempfolder, "*.jpg")) { если (str.ToUpper().EndsWith(".JPG")) { пытаться { System.IO.File.Delete(str); } catch (System.Exception ex) { System.Console.WriteLine("Ошибка удаления '" + str + "'."); } } } /*Получить файлы */ System.Collections.Generic.List lstOldFiles = new System.Collections.Generic.List(System.IO.Directory.GetFiles(Tempfolder, "*.jpg")); /*Запускаем скрипт*/ строка ars = "-dNOPAUSE -sDEVICE=jpeg -r" + Разрешение.ToString() + " -o" + Tempfolder + "%d.jpg -sPAPERSIZE=a4 " + "\"" +Filename + "\""; Процесс процесса = новый процесс (); proc.StartInfo.FileName = GSExecutable; proc.StartInfo.Arguments = ars; proc.StartInfo.CreateNoWindow = ложь; процесс.Старт(); процесс.WaitForExit(); проц.Dispose(); проц = ноль; Система.GC.Collect(); /*Зациклить все новые созданные файлы*/ System.Drawing.Bitmap BMP = ноль; System.Collections.Generic.List lstDelFiles = new System.Collections.Generic.List(); foreach(строка jpgFilename в System.IO.Directory.GetFiles(Tempfolder, "*.jpg")) { if(!lstOldFiles.Contains(jpgимя_файла)) { BMP = System.Drawing.Bitmap.FromFile(имя_файла jpg) как System.Drawing.Bitmap; lstBMP.Add(BMP.Clone(new System.Drawing.Rectangle(0,0,BMP.Width, BMP.Height), BMP.PixelFormat)); БМП.Расположить(); БМП = ноль; lstDelFiles.Add(jpgимя_файла); } } /*Удалить файлы после конвертации*/ foreach (строка str в lstDelFiles) { пытаться { System.IO.File.Delete(str); }catch(System.Exception ex) { /*Следующее исключение выдается для каждого файла*/ System.Console.WriteLine("Ошибка удаления файла '" + str + "' после преобразования в System.Bitmap." + System.Environment.NewLine + "Подробности: " + ex.Message); } } вернуть lstBMP.ToArray(); }
Я разрабатываю класс для преобразования PDF-файла в массив System.Bitmap[] с помощью Ghostscript. Насколько я знаю, Ghostscript ограничен командной строкой, поэтому я запускаю его как процесс. Все работает нормально, код генерирует изображение типа jpg для каждой страницы. После этого я создаю список растровых изображений и клонирую его. Теперь, когда я закончу, я хочу удалить сгенерированные файлы. Это невозможно, так как собственный процесс все равно блокирует его. Ошибка возникает в цикле, который я отметил /*Удалить файлы после преобразования*/.
Кто-нибудь знает, как разблокировать файлы перед удалением?
Пожалуйста, найдите мой код ниже:
public static System.Drawing.Bitmap[] PDF2Images(строка Имя файла, строка Tempfolder, строка GSExecutable, разрешение int){ System.Collections.Generic.List lstBMP = новый System.Collections.Generic.List(); /*Удалить все файлы jpg во временной папке*/ foreach (строка str в System.IO.Directory.GetFiles(Tempfolder, "*.jpg")) { если (str.ToUpper().EndsWith(".JPG")) { пытаться { System.IO.File.Delete(str); } catch (System.Exception ex) { System.Console.WriteLine("Ошибка удаления '" + str + "'."); } } } /*Получить файлы */ System.Collections.Generic.List lstOldFiles = new System.Collections.Generic.List(System.IO.Directory.GetFiles(Tempfolder, "*.jpg")); /*Запускаем скрипт*/ строка ars = "-dNOPAUSE -sDEVICE=jpeg -r" + Разрешение.ToString() + " -o" + Tempfolder + "%d.jpg -sPAPERSIZE=a4 " + "\"" +Filename + "\""; Процесс процесса = новый процесс (); proc.StartInfo.FileName = GSExecutable; proc.StartInfo.Arguments = ars; proc.StartInfo.CreateNoWindow = ложь; процесс.Старт(); процесс.WaitForExit(); проц.Dispose(); проц = ноль; Система.GC.Collect(); /*Зациклить все новые созданные файлы*/ System.Drawing.Bitmap BMP = ноль; System.Collections.Generic.List lstDelFiles = new System.Collections.Generic.List(); foreach(строка jpgFilename в System.IO.Directory.GetFiles(Tempfolder, "*.jpg")) { if(!lstOldFiles.Contains(jpgимя_файла)) { BMP = System.Drawing.Bitmap.FromFile(имя_файла jpg) как System.Drawing.Bitmap; lstBMP.Add(BMP.Clone(new System.Drawing.Rectangle(0,0,BMP.Width, BMP.Height), BMP.PixelFormat)); БМП.Расположить(); БМП = ноль; lstDelFiles.Add(jpgимя_файла); } } /*Удалить файлы после конвертации*/ foreach (строка str в lstDelFiles) { пытаться { System.IO.File.Delete(str); }catch(System.Exception ex) { /*Следующее исключение выдается для каждого файла*/ System.Console.WriteLine("Ошибка удаления файла '" + str + "' после преобразования в System.Bitmap." + System.Environment.NewLine + "Подробности: " + ex.Message); } } вернуть lstBMP.ToArray(); }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Тихая печать, отличающаяся от командной строки Shell_exec и ручной командной строки
Anonymous » » в форуме Php - 0 Ответы
- 90 Просмотры
-
Последнее сообщение Anonymous
-