-1

プログラムに問題があります。C# で画像を保存しようとしていますが、コンピューターで新しい写真を撮ると保存されますが、上書きされます。数字のように自動的に別の名前を付ける方法はありますか? 例えば:

  • 画像1.jpg
  • 画像2.jpg
  • 画像3.jpg

Visual Studio 2012 と C# でのコーディングを使用しています。これは、使用しているコードの一部です。

  private void button3_Click(object sender, EventArgs e)
  {   


        Rectangle form = this.Bounds;
        using (Bitmap bitmap = new Bitmap(form.Width, form.Height))
        {
            using (Graphics graphic =
                Graphics.FromImage(bitmap))
            {
                graphic.CopyFromScreen(form.Location,
                    Point.Empty, form.Size);
            }


                bitmap.Save("C:/Users/G73/Desktop/My OVMK Photos//OpenVMK.jpg", ImageFormat.Jpeg);


        }
    }
4

6 に答える 6

3

タイムスタンプのようなものを追加できます:

bitmap.Save("C:/Users/G73/Desktop/My OVMK Photos//OpenVMK" + DateTime.Now.ToString(yyyyMMddHHmmss) + ".jpg", ImageFormat.Jpeg);
于 2013-08-29T07:21:11.407 に答える
1

非常に単純な実装は次のようになります。

  • フォルダ内の同名ファイルを数える
  • 保存するファイルの名前に Count+1 を追加します

何かのようなもの:

var files = Directory.GetFiles(@"C:/Users/G73/Desktop/My OVMK Photos", "OpenVMK*");
...
var newFileName = string.Format(@"C:/Users/G73/Desktop/My OVMK Photos/OpenVMK{0}.jpg", files.Length+1);
bitmap.Save(newFileName, ImageFormat.Jpeg);
于 2013-08-29T07:23:15.313 に答える
0
private void button3_Click(object sender, EventArgs e)
{

    Rectangle form = this.Bounds;
    using (Bitmap bitmap = new Bitmap(form.Width, form.Height))
    {
        using (Graphics graphic =
            Graphics.FromImage(bitmap))
        {
            graphic.CopyFromScreen(form.Location,
                Point.Empty, form.Size);
        }

        int count = 1;

        string baseFileName = "OpenVMK";
        string ext = ".jpg";
        string pathToFile = "C:/Users/G73/Desktop/My OVMK Photos";            
        while(System.IO.File.Exists(System.IO.Path.Combine(pathToFile, string.Format("{0}{1}{2}", baseFileName, i++, ext))) {};

        bitmap.Save(System.IO.Path.Combine(pathToFile, string.Format("{0}{1}{2}", baseFileName, i++, ext)), ImageFormat.Jpeg);


    }
}
于 2013-08-29T07:30:25.447 に答える
0

既存のファイルを確認して、提案されたファイル名に 1、2、3 などを追加するだけです。

    private static int GetNextFileNumber(String fileFullName) {
      int result = -1;

      String fileName = Path.GetFileNameWithoutExtension(fileFullName);
      String ext = Path.GetExtension(fileFullName);

      foreach (String file in Directory.GetFiles(Path.GetDirectoryName(fileFullName))) {
        if (!String.Equals(ext, Path.GetExtension(file), StringComparison.OrdinalIgnoreCase))
          continue;

        String name = Path.GetFileNameWithoutExtension(file);

        if (!name.StartsWith(fileName, StringComparison.OrdinalIgnoreCase))
          continue;

        if (result < 0)
          if (name.Equals(fileName, StringComparison.OrdinalIgnoreCase))
            result = 1;

        int num = 0;

        if (int.TryParse(name.Substring(fileName.Length), out num))
          if (num > result)
            result = num + 1;
      }

      return result;
    }

    private static String GetNextFileName(String fileFullName) {
      int number = GetNextFileNumber(fileFullName);

      if (number <= 0)
        return fileFullName;

      return Path.Combine(Path.GetDirectoryName(fileFullName), 
                          Path.GetFileNameWithoutExtension(fileFullName) + (number).ToString() + Path.GetExtension(fileFullName));
    }


   ....

   private void button3_Click(object sender, EventArgs e)
   { 
      ....
      // bitmap.Save("C:/Users/G73/Desktop/My OVMK Photos/OpenVMK.jpg", ImageFormat.Jpeg);

      // Instead of file_name use GetNextFileName(file_name):
      bitmap.Save(GetNextFileName("C:/Users/G73/Desktop/My OVMK Photos/OpenVMK.jpg"), ImageFormat.Jpeg);
      ....
   }
于 2013-08-29T07:46:06.127 に答える