在XE5中我已经创建了应用程序,默认情况下使用OnShow函数加载带有多行的小 txt 文件。 还有1个 TEdit1 字段,默认值= 300 ,TButton将文件保存在已定义的目录中。
怎么可能: 1.)使用TEdit1字段中的值来获取该指定目录中的文件数量,如果需要可以更改值; 2.)所有生成的文件应该是:1.txt,2.txt,3.txt ......等。
现在按钮功能是:
procedure TForm1.GenerateClick(Sender: TObject);
var
dirName : String;
begin
// Create a new directory
dirName := 'gen';
if DirectoryExists(dirName)
then
Memo1.Lines.SaveToFile('gen\default.txt')
else
CreateDir(dirName);
Memo1.Lines.SaveToFile('gen\default.txt');
end;
祝你好运, ģ
整个工作代码:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IOUtils, Vcl.ComCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
SaveFile: TButton;
Generate: TButton;
Memo1: TMemo;
procedure LoadFile(Sender: TObject);
procedure SaveFileClick(Sender: TObject);
procedure GenerateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.LoadFile(Sender: TObject);
begin
if FileExists('template.txt')then begin
Memo1.Lines.LoadFromFile('template.txt');
end
else
ShowMessage('Cant find template.txt, add text and use SAVE button !!!');
end;
procedure TForm1.SaveFileClick(Sender: TObject);
begin
Memo1.Lines.SaveToFile('template.txt');
end;
procedure TForm1.GenerateClick(Sender: TObject);
var
dirName, fName : String;
i, max: integer;
begin
// Create a new directory
dirName := 'gen';
if NOT DirectoryExists(dirName) then
CreateDir(dirName);
fName := Edit1.Text;
max := StrToInt(fName);
for i := 1 to max do begin
fName := dirName + '\'+ IntToStr(i) + '.txt';
Memo1.Lines.SaveToFile( fName );
end;
end;
end.
谢谢:)
答案 0 :(得分:1)
将数据存储在可视组件中的想法有点臭。但是如果你坚持 - 那么你可以在.TAG属性中存储整数值。但是没关系,请在下方了解一些休闲功能,并了解begin
和end
个关键字:
更新:将相对名称转换为完全限定的ForceDirectories。使用过的功能:
使用Delphi提供的现成功能的代码变为:
procedure TForm1.GenerateClick(Sender: TObject);
var
dirName, fName : String;
i, max: integer;
begin
// Create a new directory
dirName := 'gen';
dirName := ExpandUNCFileName(dirName);
// converting possible relative path to absolute
dirName := IncludeTrailingPathDelimiter(GetCurrentDir) + dirName;
// yet another way to do the same, as above
// GCD function would return paths like "C:\" or like "C:\Users\Name\Documents"
// so we don't know in advance if there would be slash at the end or not
ForceDirectories(dirName);
fName := EditField.Text;
max := StrToInt(fName);
// even better: max := EditField.Tag; and change TAG property, not TEXT in IDE
for i := 1 to max do begin
fName := dirName + PathDelimiter + IntToStr(i) + '.txt';
MemoField.Lines.SaveToFile( fName );
end;
end;
也可以调用TDirectory.CreateDirectory(dirName);
而不是ForceDirectories
,但我现在无法检查前者是否使用相对路径,或者在调用之前还需要路径扩展。如果可以 - 则未更改的dirName
将是有效参数以直接调用该函数。
你原来的功能实际上有一个奇怪的,破碎的结构。双击保存。我在下面的原始代码的正确结构下方便阅读:
procedure TForm1.GenerateClick(Sender: TObject);
var
dirName : String;
begin
// Create a new directory
dirName := 'gen';
if DirectoryExists(dirName)
then
Memo1.Lines.SaveToFile('gen\default.txt')
else
CreateDir(dirName);
Memo1.Lines.SaveToFile('gen\default.txt');
end;