我在做一个程序,需要一个照屏幕上,并将其保存一个文件夹作为一位画面。我似乎可以跑到一个问题,虽然,该图仅仅是复盖本身。

任何人都可以告诉我,我怎么能让它因此,当它可以节省,这个数字将是一个高于去?例如:节省1:Screenshot0001.bmp节省2:Screenshot0002.bmp 节省3:Screenshot0003.bmp

等等。

有帮助吗?

解决方案

有许多方法来完成这样的东西。

  1. 不喜欢你的数码相机不;有一个计数器并保存在一个文件中,或在注册表中。你可能会遇到的多用户问题,你会仍然必须处理的情况下的图像已经存在。

  2. 不要使用增加的数字,但是写一日期时间,在文件名称。FileName:='Screenshot_'+FormatDateTime('yyyymmdd-hhnnss-zzz.bmp',now());

  3. 做什么样的代码下面找到的最新数字。我觉得这没什么你描述,但记住,这个代码将获得较慢的因为你写更多的图像。有成千上万的照片和一个缓慢的驱动或网络,它可以挂'你的节目。

..

i := 0;
while FileExists(Format('%sScreenshot%.04d.bmp',[ImgPath,i])) do
  inc(i);

其他提示

在程序启动时,迭代的所有截图*.bmp文件,分析了数字的一部分,并找到最高分配这一价值到你的柜台。当做一个快照,进入一个循环的这一尝试crreating。bmp与"只有创建的,如果不存在已经"(CREATE_NEW)语义,增加反,直到找到一个未使用的名称。

交替,使用时间戳,而不是反:)

你需要一个常喜欢这个模仿Windows文件的重复那里的第一个文件是'文件',二是'我的文件(2)",然后"我的文件(3)'等等。

function AppendDuplicationNumber( const AStr : string ) : string;
// Used to make strings unique
// This examines the string AStr for trailing '(n)' where
// 'n' is an integer.
// If the (n) part is found, n is incremented, otherwise '(2)' is
// appended to the string.
var
  iLH, iRH, I : integer;
  S           : string;
begin
  Result := AStr;
  iLH    := CharPosBackwards( '(', Result );
  If iLH > 0 then
    begin
    iRH := PosEx( ')', Result, iLH );
    If iRH > 0 then
      begin
      I := StrToIntDef( Copy( Result, iLH+1, iRH-iLH-1 ), 0 );
      If I > 0 then
        begin
        Inc(I);
        S := IntToStr( I );
        Delete( Result, iLH+1, iRH-iLH-1 );
        Insert( S, Result, iLH+1 );
        Exit;
        end;
      end;
    end;

  // Did not increment existing (n), so append it.
  Result := Result + ' (2)';
end;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top