0

次の問題または質問があります。この機能があります

private void SavePic(Canvas canvas, string filename)
    {
        RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
         (int)canvas.Width, (int)canvas.Height,
         96d, 96d, PixelFormats.Pbgra32);
        // needed otherwise the image output is black
        canvas.Measure(new Size((int)canvas.Width, (int)canvas.Height));
        canvas.Arrange(new Rect(new Size((int)canvas.Width, (int)canvas.Height)));

        renderBitmap.Render(canvas);

        //JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(renderBitmap));

        using (FileStream file = File.Create(filename))
        {

            encoder.Save(file);
        }
    }

および対応する呼び出し SavePic(mySuperDefaultPainting, @"C:\KinDraw\out.png");

今、ファイル名に日付と時刻を付けたいですか?関数呼び出しでこの DateTime 関数を取得できますか?

多分私は誰かがここで助けることができますか?

4

5 に答える 5

3

試してください(ファイルパスの更新)

string fileName=string.Format("{0}-{1:ddMMMyyyy-HHmm}.png", @"C:\KinDraw\out", 
                                                    DateTime.Now);
if(!Directory.Exists(Path.GetDirectoryName(fileName)))
{
    Directory.CreateDirectory(Path.GetDirectoryName(fileName));
}

SavePic(mySuperDefaultPainting, fileName);

時刻が2013 年 1 月 29 日午後 7 時 30 分だとすると、次のようになりますC:\KinDraw\out-29JAN2013-1930.png

CreateDirectoryただし、この MSDN ページで詳細を確認してください。また、ブロックを探してExceptionsラップします。try-catch

于 2013-01-29T08:37:06.280 に答える
2
string timestamp =DateTime.Now.ToString("MMddyyyy.HHmmss");
SavePic(mySuperDefaultPainting, @"C:\KinDraw\out"+timestamp+".png");

更新:(ディレクトリが存在しない場合はディレクトリを作成します)

if (!Directory.Exists(filepath))
    Directory.CreateDirectory(filepath);

それが役に立てば幸い :)

于 2013-01-29T08:38:06.433 に答える
1

そこに次の行を入れるだけです:

string stampedFileName = filename.Replace(".",
    string.Format("{0:YYYY-mm-dd hhmmss}", DateTime.UtcNow) + ".");

そして変更

using (FileStream file = File.Create(filename))

using (FileStream file = File.Create(stampedFilename))

前者はサマータイムの影響を受けないからとDateTime.UtcNowいうよりは、利用することが重要です。DateTime.Now

編集:上記で提案した形式には、ファイル名をアルファベット順に並べ替えてから自動的に時系列にも並べ替えるという利点があります。

于 2013-01-29T08:38:36.690 に答える
1

これをコードの先頭に追加してみてください。

var extension = Path.GetExtension(filename);
var newName = filename.Replace(filename, extension) + DateTime.Now.ToString("yyyy-MM-dd HH:mm:dd") + extension;
于 2013-01-29T08:37:36.727 に答える