如何将控制台应用程序映像文件格式替换为相同文件名但格式不同的文件格式

本文关键字:格式 文件 文件名 替换 控制台 应用程序 映像 | 更新日期: 2023-09-27 18:33:17

在这种情况下,原始格式是.jpg,我想用.gif替换文件。因此,如果原始文件例如:test.jpg,则最终目录中将只有test.gif

这是我所做的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Drawing;
namespace ConvertImagesFormats
{
    class Program
    {
        static void Main(string[] args)
        {
            FileInfo[] imagesToConvert;
            string sourceDirectory = @"C:'test";
            string targetDirectory = @"C:'test";
            DirectoryInfo di = new DirectoryInfo(sourceDirectory);
            imagesToConvert = di.GetFiles("*.jpg");
            Bitmap bmp;
            for (int i = imagesToConvert.Length - 1; i > 0; i--)
            {
                bmp = new Bitmap(imagesToConvert[i].FullName);
                bmp.Save(targetDirectory + "''" + imagesToConvert[i].Name, 
                    System.Drawing.Imaging.ImageFormat.Gif);
            }
        }
    }
}

但是我得到了例外:

bmp.Save(targetDirectory + "''" + imagesToConvert[i].Name, 
    System.Drawing.Imaging.ImageFormat.Gif);

.

外部异常

GDI+ 中发生一般错误

System.Runtime.InteropServices.ExternalException 未处理
HResult=-2147467259 消息=GDI+ 中发生一般错误。
源=系统.绘图错误代码=-2147467259堆栈跟踪: at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams( at System.Drawing.Image.Save(字符串文件名,图像格式( at ConvertImagesFormats.Program.Main(String[] args( in d:''C-Sharp''ConvertImagesFormats''ConvertImagesFormats''ConvertImagesFormats''Program.cs:line 25 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args( at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args( at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly(( 在System.Threading.ThreadHelper.ThreadStart_Context(对象状态( at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx( at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx( at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state( at System.Threading.ThreadHelper.ThreadStart(( InnerException:

如何将控制台应用程序映像文件格式替换为相同文件名但格式不同的文件格式

它有效吗?还添加了一些重构:

using System.Drawing.Imaging;
using System.IO;
using System.Drawing;
namespace ConvertImagesFormats
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:'test";
            string targetDirectory = @"C:'test";
            ImageFormat imageFormat = ImageFormat.Gif;
            foreach(var image in Directory.GetFiles(sourceDirectory, "*.jpg"))
            {
                using (Bitmap bmp = new Bitmap(image))
                {
                    string targetName = Path.GetFileNameWithoutExtension(image) + "." + imageFormat;
                    bmp.Save(Path.Combine(targetDirectory, targetName), imageFormat);
                }
            }
        }
    }
}