如何在C#中使用不同文件名保存来自网络摄像头的捕获图像

时间:2011-10-31 01:49:43

标签: c#

如何将从网络摄像头捕获的图像保存到具有不同文件名的c:/驱动器?

我已经能够捕获图像网络摄像头并将其保存在我的c:/驱动器上,但是我遇到了一些问题。我希望每次保存图像时,都不应该覆盖已保存在我的c:/

上的旧图像

(即保存的图像与之前未保存的图像不同pix1.jpgpix2.jpgpixs3.jpgpix4.jpg等。

3 个答案:

答案 0 :(得分:4)

就个人而言,我会将一个DateTime格式的可排序格式附加到文件名而不是使用数字。

string name = "pix";
string fileName = string.Format("{0}_{1}", name, DateTime.Now.ToString("u"));

这会为您提供类似pix_201110310834pix_201110310835pix_201110310836等文件名。

使用这种方法,您不再需要担心只使用正确的索引; DateTime将始终继续前进。

注意:

  • 如果您需要更短的间隔(可能是毫秒),您可以 总是只追加DateTime.Now.Ticks
  • 如果您担心跨越时区或切换进入和退出夏令时,请使用中性时区。 (DateTime.UtcNow是你的朋友)

答案 1 :(得分:2)

在捕获并保存到某个文件名的方法中,使用:

string fileName;
int n = 0;

do {
    fileName = "pix" + (++n).ToString() + ".jpg";
} while(System.IO.File.Exists(fileName));

然后将fileName添加到路径中,您就完成了。

答案 2 :(得分: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));