C# 如何在C中使用不同的文件名保存从网络摄像头捕获的图像#
如何使用不同的文件名将从网络摄像头捕获的图像保存到我的C# 如何在C中使用不同的文件名保存从网络摄像头捕获的图像#,c#,C#,如何使用不同的文件名将从网络摄像头捕获的图像保存到我的c://驱动器 我已经能够捕获图像网络摄像头并将其保存在我的c:/drive上,但我遇到了一些小问题。我希望每次保存图像时,它不应覆盖已保存在我的c:/ (即保存的图像将不同于以前未触及的图像,具有不同的名称pix1.jpg,pix2.jpg,pixs3.jpg,pix4.jpg等)。在捕获并保存到特定文件名的方法中,请使用: string fileName; int n = 0; do { fileName = "pix" + (
c://
驱动器
我已经能够捕获图像网络摄像头并将其保存在我的c:/drive上,但我遇到了一些小问题。我希望每次保存图像时,它不应覆盖已保存在我的c:/
(即保存的图像将不同于以前未触及的图像,具有不同的名称
pix1.jpg
,pix2.jpg
,pixs3.jpg
,pix4.jpg
等)。在捕获并保存到特定文件名的方法中,请使用:
string fileName;
int n = 0;
do {
fileName = "pix" + (++n).ToString() + ".jpg";
} while(System.IO.File.Exists(fileName));
然后将
fileName
添加到路径中,就完成了。在捕获并保存到特定文件名的方法中,使用:
string fileName;
int n = 0;
do {
fileName = "pix" + (++n).ToString() + ".jpg";
} while(System.IO.File.Exists(fileName));
然后将
fileName
添加到路径中,就完成了。如果无法跟踪当前编号的输出图片,可以查看当前存在的文件并确定最大数量,然后添加具有下一个编号的文件
int max = 0;
var files = Directory.EnumerateFiles(@"C:\pictures", "pix*.jpg");
if(files.Any())
max = files.Select(x => Convert.ToInt32(Path.GetFileNameWithoutExtension(x.Name)
.Substring("pix".Length)))
.Max();
string fileName = Path.Combine(@"C:\pictures", string.Format("pix{0}.jpg", max + 1));
如果无法跟踪当前编号的输出图片,则可以查看当前存在的文件并确定最大编号,然后添加具有下一个编号的文件
int max = 0;
var files = Directory.EnumerateFiles(@"C:\pictures", "pix*.jpg");
if(files.Any())
max = files.Select(x => Convert.ToInt32(Path.GetFileNameWithoutExtension(x.Name)
.Substring("pix".Length)))
.Max();
string fileName = Path.Combine(@"C:\pictures", string.Format("pix{0}.jpg", max + 1));
就我个人而言,我会在文件名中附加一个可排序格式的
DateTime
,而不是使用数字
string name = "pix";
string fileName = string.Format("{0}_{1}", name, DateTime.Now.ToString("u"));
这将为您提供如下文件名:pix_201110310834
、pix_201110310835
、pix_201110310836
,等等
使用这种方法,您不再需要担心只使用正确的索引;DateTime将始终向前推进
注:
- 如果您需要更短的时间间隔(可能是毫秒),您可以
始终只需追加
DateTime.Now.Ticks即可
- 如果您担心跨时区移动或切换DST,请使用中性时区。(
是你的朋友)DateTime.UtcNow
DateTime
,而不是使用数字
string name = "pix";
string fileName = string.Format("{0}_{1}", name, DateTime.Now.ToString("u"));
这将为您提供如下文件名:pix_201110310834
、pix_201110310835
、pix_201110310836
,等等
使用这种方法,您不再需要担心只使用正确的索引;DateTime将始终向前推进
注:
- 如果您需要更短的时间间隔(可能是毫秒),您可以
始终只需追加
DateTime.Now.Ticks即可
- 如果您担心跨时区移动或切换DST,请使用中性时区。(
是你的朋友)DateTime.UtcNow
n
并每次重复使用它。可能让它重置每个程序启动,但不要让它在每次调用此方法时重置。“//将图像另存为jpeg格式。//image.Save(“c:\\traffic\u light\\image.jpeg”,System.Drawing.Imaging.ImageFormat.jpg);”@DaveChika:将文件名
与您的路径(减去文件名)连接起来。@minitecht,谢谢。我能够从笔记本电脑网络摄像头捕获图像,但它将pix/图像保存在bin的调试文件夹中。但是,当我添加一个外部网络摄像头时,它不会出现问题,但会说“在捕获视频图像时出现错误。视频图像现在将被终止,对象引用未设置为对象的实例”。@DaveChika:这需要一个新问题,因为它与此无关。如果你这样做,我会确保您每次都做一些避免循环/文件名检查的事情。例如,我会存储n
并每次重复使用它。可能让它重置每个程序启动,但不要让它在每次调用此方法时重置。“//将图像另存为jpeg格式。//image.Save(“c:\\traffic\u light\\image.jpeg”,System.Drawing.Imaging.ImageFormat.jpg);”@DaveChika:将文件名
与您的路径(减去文件名)连接起来。@minitecht,谢谢。我能够从笔记本电脑网络摄像头捕获图像,但它将pix/图像保存在bin的调试文件夹中。但是,当我添加一个外部网络摄像头时,它不会出现问题,但会说“在捕获视频图像时出现错误。视频图像现在将被终止,对象引用未设置为对象的实例”。@DaveChika:这需要一个新问题,因为它与此无关。BROKENglass,这是我保存图像的方法,请告诉我如何在我的方法中使用你的代码。我是C#public static void SAVEimage(System.Drawing.Image)的初学者{//将图像另存为jpeg.Image.Save(“C:\\image1.gif”,System.Drawing.Imaging.ImageFormat.jpeg);}BROKENglass,这是我保存图像的方法,请告诉我如何在我的方法中使用你的代码。我是C#public static void SAVEimage(System.Drawing.Image)的初学者{//将图像另存为jpeg.Image.Save(“C:\\image1.gif”,System.Drawing.Imaging.ImageFormat.jpeg);}