スクリーンショット プログラムを作成しましたが、すべて問題なく動作しています。唯一の問題は、スクリーンショットに番号を追加して保存する方法がわからないことです。
例: スクリーンショット 1、スクリーンショット 2、スクリーンショット 3、スクリーンショット 4 など。
明らかに、これは保存されている他のファイルに適用できます。何か案は?ありがとうございました。
これは、まさにこのケースで私が頻繁に使用する方法です。「スクリーンショット」のような文字列を渡すだけで、「スクリーンショット [番号]」の形式で使用可能な最小のファイル名が検索されます (まだ存在しない場合は「スクリーンショット」のみ)。
private string GetUniqueName(string name, string folderPath)
{
string validatedName = name;
int tries = 1;
while (File.Exists(folderPath + validatedName))
{
validatedName = string.Format("{0} [{1}]", name, tries++);
}
return validatedName;
}
(注: これは、ファイル拡張子を考慮しない、わずかに簡略化されたバージョンです)。
数字を使う理由はありますか?後で別のセッションで同じフォルダを再利用しますか? 日が異なる場合、数値を再起動して既存のファイルを置き換える必要がありますか?
これらは、心に留めておくべき種類のものです。OS X は、スクリーンショットを作成するときに「写真 1」、「写真 2」を提供していたことに注意する価値があります。ありがたいことに、新しいバージョンでは、「2009 年 12 月 8 日 11.35.12 に撮影したスクリーンショット」などを使用するようになりました。日付による並べ替えが簡単になり、名前の競合を簡単に回避できます。
他の提案に投稿されているように、ファイルが既に存在するかどうかを確認する必要があり、再試行すると DateTime.Now が異なるため、ファイル名が異なります。もちろん、スクリーンショットが同じミリ秒であるか、ユーザーが日付/時刻をいじっていない限り (または夏時間も混乱する可能性があります)、競合が発生することはありません。
これは私が使用するものです:
string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string newPath;
List<string> files = new List<string>(Directory.GetFiles(path,"*.txt",SearchOption.TopDirectoryOnly));
for(int i=0; files.Contains(newPath=string.Format(path + @"\textfile{0}.txt",i)); i++)
{
Console.WriteLine("File:{0} exist skipping....", newPath);
}
File.WriteAllText(newPath,"dummy");
ファイルを書き込んでいるので、現在の保存ディレクトリを検索して ScreenshotXX という名前の最新のファイルを見つけ、正規表現を使用して名前から番号を取得する方法があります。
DirectoryInfo
これには、クラスと一緒にクラスを使用できますRegex
。
ソリューションの概要
これはあなたのために働くでしょうか?