GVKun编程网logo

delphi – 如何对单个基本文件“diff”多个文件?(delphi 文件夹下所有文件)

23

对于delphi–如何对单个基本文件“diff”多个文件?感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍delphi文件夹下所有文件,并为您提供关于DelphiSHMultiFilePrope

对于delphi – 如何对单个基本文件“diff”多个文件?感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍delphi 文件夹下所有文件,并为您提供关于Delphi SHMultiFileProperties查看多个文件属性、delphi – 如何在不覆盖现有文件的情况下创建线程文件?、delphi – 如何处理临时文件?、delphi – 如何将多个文件扩展名传递给TDirectory.GetFiles?的有用信息。

本文目录一览:

delphi – 如何对单个基本文件“diff”多个文件?(delphi 文件夹下所有文件)

delphi – 如何对单个基本文件“diff”多个文件?(delphi 文件夹下所有文件)

我有一个配置文件,我认为是我的“基本”配置。我想比较最多10个其他配置文件与单个基本文件。我正在寻找一个报告,其中每个文件与基本文件进行比较。

我一直在看diff和sdiff,但他们并没有完全提供我正在寻找的东西。

我已经考虑将每个文件的基础单独区分开来,但是我的问题就是将它们合并成一个报告。理想情况下,如果在所有10个配置文件中丢失了相同的行(与基本配置相比较),我希望以简单的可视化方式报告。例如,这里基本上是我想要做的(这个例子有1个基本文件和3个配置文件,每个都与基本配置进行比较):

Here’s a link to the picture below
alt text http://img141.imageshack.us/img141/3264/config2.png

请注意,几个配置文件中缺少某些行(与基本单独比较)。我希望能够把它们放在同一行上(如上所述)。

注意,上面的截图只是一个模型,而不是一个实际的应用程序。

我已经看过使用一些Delphi控件来编写我自己的(我有Delphi 2007),但是如果有一个已经这样做的程序,我更喜欢它。

我看过的Delphi控件是TDiff和TrmDiff* components included in rmcontrols。

解决方法

对于仍然想知道如何做到这一点的人来说, diffuse是最接近的答案,它通过显示所有文件和在邻居之间进行三向合并来进行N路合并。

Delphi SHMultiFileProperties查看多个文件属性

Delphi SHMultiFileProperties查看多个文件属性

总结

以上是小编为你收集整理的Delphi SHMultiFileProperties查看多个文件属性全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

delphi – 如何在不覆盖现有文件的情况下创建线程文件?

delphi – 如何在不覆盖现有文件的情况下创建线程文件?

到现在为止,每当我想创建一个文件而不覆盖现有文件时,我就做了这样的事情:

if not FileExists(filename) then
  stream := TFileStream.Create(filename,fmCreate);

但这不是线程安全的.所以现在我正在寻找一个线程安全版本.

也许我可以结合一些模式使TFileStream.Create(filename,fmCreate fm ???);如果文件存在则失败?

我需要这个与旧DOS程序通信目录锁.但是DOS程序没有打开文件.

总结

以上是小编为你收集整理的delphi – 如何在不覆盖现有文件的情况下创建线程文件?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

delphi – 如何处理临时文件?

delphi – 如何处理临时文件?

在我的应用程序中,我的用户可以将文件(pdf / xls / doc)导入表或将它们导出到文件夹.现在我想直接打开这些文件.

到目前为止,我能够:
– 获得一个独特的名字
– 将blob文件保存到生成的文件中
– 打开它

问题是我不知道如何删除(或更新)文件,之后用户将关闭该文件.

如果有人可以帮助我,我会很高兴:)

这是我的代码的快照:

procedure OpenTemporaryFile(AFileExtension: String; AKey: Integer;
            AMyConnection: TMyConnection);
     Var
       qrDocuments : TMyQuery ;
       TmpName,ExtName: string;
       TempFileName: TFileStream;
    begin
       //Generate an unique tmp file located into user temp folder
       TmpName:=  FileGetTempName('~SI');
       ExtName:= ChangeFileExt(TmpName,AFileExtension);
       //Change files extension so that Shellexecute will be able to open the file
       RenameFile(TmpName,ExtName );
       //Creating the FileStream (data is fetched from an blob field)
       TempFileName := TFileStream.Create(ExtName,fmOpenReadWrite );

       qrDocuments := TMyQuery.create(nil);
       try
        qrDocuments.Connection := AMyConnection;
        qrDocuments.Close;
        qrDocuments.sql.Clear;
        qrDocuments.sql.Text:='Select Id,FileName,Data from files where Id = :prId And Data IS NOT NULL';
        qrDocuments.ParamByName('prId').AsInteger := AKey;
        qrDocuments.open;
        TBlobField(qrDocuments.FieldByName('Data')).SavetoStream(TempFileName);
       finally
          TempFileName.Free;
          qrDocuments.free;
       end;
       ShellExecute(Application.Handle,'open',Pchar(ExtName),'',SW_SHOWnorMAL);
       DeleteFile( ExtName);
    end;

解决方法

不幸的是,现在有4个upVotes用于 this answer by Remy Lebeau,当时该技术根本不适用于大多数应用程序.也许其中一位支持者可以发布一个代码片段,允许用Acrobat Reader打开PDF文件,而文件仍然打开时带有FILE_FLAG_DELETE_ON_CLOSE标志?

无论如何,您可以在这里结合一些提示以获得最佳结果:

>拥有应用程序使用的临时文件的内部列表.
>在程序关闭时,请遍历临时文件列表并尝试删除它们.如果其中一些失败(因为它们仍然在外部应用程序中打开),请在the code gabr gave you重新启动时注册这些删除.
>无论何时需要新的临时文件,首先要遍历内部文件列表并尝试重用其中一个文件.仅在此失败时才创建新文件(并将其名称添加到列表中).

我更喜欢这种方法在重启时注册所有文件以进行删除,因为我不确定应用程序可能打开多少个临时文件 – 也许MOVEFILE_DELAY_UNTIL_REBOOT可以注册的文件数量有限制?这是一个系统范围的资源,我只会谨慎使用.

delphi – 如何将多个文件扩展名传递给TDirectory.GetFiles?

delphi – 如何将多个文件扩展名传递给TDirectory.GetFiles?

TDirectory.GetFiles有一个名为 SearchPattern的参数.Embarcadero的文档说

The mask used when matching file names (for example,“*.exe” matches all the executable files).

但是,我想传递多种文件类型.我从FilterComboBox.Mask中获取这些类型.所以,它是一个看起来像’* .txt; * .rtf; * .doc’的字符串.

我试图将该字符串直接传递给GetFiles,但它不起作用.我是否必须解析它,将其分解成碎片并将每个单独的部分提供给GetFiles?

解决方法

GetFiles后面的RTL代码调用 Masks.MatchesMask来测试与搜索模式的匹配.此功能仅支持对单个掩码进行屏蔽.

另一种方法是使用允许TFilterPredicate的GetFiles重载.您提供了一个谓词,用于测试名称是否与您的模式匹配.

uses
  StrUtils,Types,Masks,IoUtils;

function MyGetFiles(const Path,Masks: string): TStringDynArray;
var
  MaskArray: TStringDynArray;
  Predicate: TDirectory.TFilterPredicate;
begin
  MaskArray := SplitString(Masks,';');
  Predicate :=
    function(const Path: string; const SearchRec: TSearchRec): Boolean
    var
      Mask: string;
    begin
      for Mask in MaskArray do
        if MatchesMask(SearchRec.Name,Mask) then
          exit(True);
      exit(False);
    end;
  Result := TDirectory.GetFiles(Path,Predicate);
end;

请注意,MatchesMask每次调用时都会创建并销毁分配了TMask的堆.我可以想象,这是长时间搜索的性能瓶颈.在这种情况下,您可以从MaskArray创建一个TMask对象数组.并使用谓词中的那些进行测试.我不知道这是否是一个有效的关注,只是在我仔细阅读代码时发生的事情.

我们今天的关于delphi – 如何对单个基本文件“diff”多个文件?delphi 文件夹下所有文件的分享已经告一段落,感谢您的关注,如果您想了解更多关于Delphi SHMultiFileProperties查看多个文件属性、delphi – 如何在不覆盖现有文件的情况下创建线程文件?、delphi – 如何处理临时文件?、delphi – 如何将多个文件扩展名传递给TDirectory.GetFiles?的相关信息,请在本站查询。

本文标签: