7

スクリーンショット プログラムを作成しましたが、すべて問題なく動作しています。唯一の問題は、スクリーンショットに番号を追加して保存する方法がわからないことです。

例: スクリーンショット 1、スクリーンショット 2、スクリーンショット 3、スクリーンショット 4 など。

明らかに、これは保存されている他のファイルに適用できます。何か案は?ありがとうございました。

4

6 に答える 6

13

これは、まさにこのケースで私が頻繁に使用する方法です。「スクリーンショット」のような文字列を渡すだけで、「スクリーンショット [番号]」の形式で使用可能な最小のファイル名が検索されます (まだ存在しない場合は「スクリーンショット」のみ)。

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;
}

(注: これは、ファイル拡張子を考慮しない、わずかに簡略化されたバージョンです)。

于 2009-10-08T00:55:05.017 に答える
3

数字を使う理由はありますか?後で別のセッションで同じフォルダを再利用しますか? 日が異なる場合、数値を再起動して既存のファイルを置き換える必要がありますか?

これらは、心に留めておくべき種類のものです。OS X は、スクリーンショットを作成するときに「写真 1」、「写真 2」を提供していたことに注意する価値があります。ありがたいことに、新しいバージョンでは、「2009 年 12 月 8 日 11.35.12 に撮影したスクリーンショット」などを使用するようになりました。日付による並べ替えが簡単になり、名前の競合を簡単に回避できます。

他の提案に投稿されているように、ファイルが既に存在するかどうかを確認する必要があり、再試行すると DateTime.Now が異なるため、ファイル名が異なります。もちろん、スクリーンショットが同じミリ秒であるか、ユーザーが日付/時刻をいじっていない限り (または夏時間も混乱する可能性があります)、競合が発生することはありません。

于 2009-10-08T01:10:44.600 に答える
0

これは私が使用するものです:

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");

于 2010-09-15T20:48:55.110 に答える
0

ファイルを書き込んでいるので、現在の保存ディレクトリを検索して ScreenshotXX という名前の最新のファイルを見つけ、正規表現を使用して名前から番号を取得する方法があります。

DirectoryInfoこれには、クラスと一緒にクラスを使用できますRegex

于 2009-10-08T00:52:27.530 に答える
0

ソリューションの概要

  1. Directory.GetFiles(dest);
  2. ファイル名の並べ替え
  3. 最後のファイル名を分析し、最後に使用した番号を見つけます
  4. 次のファイルに次の番号を追加して書き込みます。

これはあなたのために働くでしょうか?

于 2009-10-08T00:52:40.120 に答える