gpt4 book ai didi

file - 如何将文本文件保存到特定文件夹

转载 作者:行者123 更新时间:2023-12-03 15:39:50 25 4
gpt4 key购买 nike

我创建了一个带有登录系统的程序,用户在其中输入他的信息,程序检查程序连接到的数据库以查看结果是否匹配,然后让用户登录。我想创建一个日志文件每次用户登录时。日志文件的名称应包含用户的用户名以及用户登录的日期和时间。我使用以下代码来检查用户的凭据并将其详细信息写入日志文件。另外,我希望文件名中的日期类似于 2013 年 1 月 23 日。因此,其编码位于“with dmPredictGame do...”之前

 sDate := DateToStr(Date());
sTime := TimeToStr(Time());

iYear := StrToInt(Copy(sDate,1,4));
iDay := StrToInt(Copy(sDate,9,2));
K := StrToInt(Copy(sDate,6,2));

Case K of
1 : sMonth := 'January';
2 : sMonth := 'February';
3 : sMonth := 'March';
4 : sMonth := 'April';
5 : sMonth := 'May';
6 : sMonth := 'June';
7 : sMonth := 'July'; //Check for the current month
8 : sMonth := 'August';
9 : sMonth := 'September';
10 : sMonth := 'Oktober';
11 : sMonth := 'November';
12 : sMonth := 'December';
end;

sTime1 := copy(sTime,1,2);
sTime2 := copy(sTime,4,2);
sLoginTime := sTime1 + ';' + sTime2; //Use ; because windows does not allow : in file names
sLoginDate := IntToStr(iDay) + ' ' + sMonth + ' ' + IntToStr(iYear);


with dmPredictGame do
begin
if tblUserInfo.Locate('Username', edtUsername.Text, []) AND ((edtPassword.Text) = tblUserInfo['Password']) then //Check if the username and password is correct.
begin
MessageDlg('Login was successful! Welcome back ' + edtUsername.Text, mtInformation, [mbOK],0);
edtUsername.Text := tblUserInfo['Username'];
begin
sUsername := edtUsername.Text;
sPassword := tblUserInfo['Password'];
sName := tblUserInfo['Name'];
sSurname := tblUserInfo['Surname'];
assignFile(UserLogFile, 'Log ' + sUsername + ' (' + sLoginDate + ') ' + sLoginTime + '.txt');
Rewrite(UserLogFile);
writeln(UserLogFile, 'Username: ' + sUsername);
writeln(UserLogFile, 'Password: ' + sPassword);
writeln(UserLogFile, 'Name: ' + sName);
writeln(UserLogFile, 'Surname: ' + sSurname);
writeln(UserLogFile, 'Date Logged In: ' + sDate);
writeln(UserLogFile, 'Time Logged In: ' + sTime);
closeFile(UserLogFile);
end;

现在我的问题:如何在与程序所在的当前目录不同的目录中创建文本文件?我在程序本身所在的同一文件夹中有一个名为“Logs”的文件夹。我希望日志在创建时保存到该文件夹​​中。

有什么建议吗?

最佳答案

只需首先检索应用程序的路径,附加 \Log\ 和文件名,然后提供 AssignFile 的完整路径。

(当然,以下所有内容都假设您实际上拥有应用程序目录的写入权限。请注意,如果您的应用程序安装在 Windows %ProgramFiles% 文件夹中,则通常不会对安装文件夹具有写权限。)

var
LogFile: string;
begin
// ... other code
LogFile := ExtractFilePath(Application.ExeName);
LogFile := IncludeTrailingPathDelimiter(LogFile) + 'Logs';
LogFile := IncludeTrailingPathDelimiter(LogFile);
LogFile := LogFile +
'Log ' +
sUserName +
' (' + sLoginDate
+ ') ' + sLoginTime + '.txt';
AssignFile(UserLogFile, LogFile);
// Write to log and other code
end;

如果您使用的是更现代版本的 Delphi,则可以使用 TPath 中的功能来简化此操作:

uses
IOUtils; // For TPath

var
LogFile: string;
begin
LogFile := TPath.Combine(ExtractFilePath(ParamStr(0)), 'Log');
LogFile := TPath.Combine(LogFile,
'Log ' +
sUserName +
' (' + sLoginDate
+ ') ' + sLoginTime + '.txt';
AssignFile(UserLogFile, LogFile);
end;

对于文件名部分,我更喜欢使用 Format 而不是所有的串联:

const
LogFileTemplate = 'Log %s(%s)%s.txt';

...
var
LogFile: string;
begin
LogFile := TPath.Combine(ExtractFilePath(ParamStr(0)), 'Log');
LogFile := TPath.Combine(LogFile,
Format(LogFileTemplate,
[sUserName, sLoginDate, sLoginTime]));
AssignFile(UserLogFile, LogFile);
// Other code
end;

为了解决您的文件命名问题(日期/时间部分),您的做法完全错误。 :-) 你做了太多的工作:

var
sDate: string;

sDate := FormatDateTime('(dd mmmm yyyy) hhmm', Now);
// Run now on my system shows (22 November 2013) 1645
ShowMessage(sDate);

这意味着您的文件名已简化。将 sLoginDatesLoginTime 替换为单个 sTimeStamp: string;,并使用如下内容:

sTimeStamp := FormatDateTime('(dd mmmm yyyy) hhmm', Now);
LogFile := LogFile +
'Log ' +
sUserName +
sTimeStamp +
'.txt';

关于file - 如何将文本文件保存到特定文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com