![](/img/trans.png)
[英]How can I replace the same name of a file using regex but in another format?
[英]How can i replace in console application image file format with the same file name but different format?
在这种情况下,原始格式为.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 +中发生一般错误。
Source = System.Drawing ErrorCode = -2147467259 StackTrace:位于System.Drawing.Image.Save(字符串文件名,ImageCodecInfo编码器,EncoderParameters encoderParams)位于System.Drawing.Image.Save(字符串文件名,ImageFormat格式)在ConvertImagesFormats.Program.Main d:\\ C-Sharp \\ ConvertImagesFormats \\ ConvertImagesFormats \\ ConvertImagesFormats \\ Program.cs中的(String [] args):System.AppDomain._nExecuteAssembly(RuntimeAssembly Assembly,String [] args)在System.AppDomain.ExecuteAssembly(String assemblyFile) ,证据组装安全性,Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()处的System.Threading.ThreadHelper.ThreadStart_Context(Object state)处的System.Threading.ExecutionContext.RunInternal(ExecutionContext executeContext,ContextCallback回调,对象状态,位于System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallback回调,对象状态,布尔值保持同步Ctx),位于System.Threading.Exe 在System.Threading.ThreadHelper.ThreadStart()处的cutionContext.Run(ExecutionContext executeContext,ContextCallback回调,对象状态)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);
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.