高手请进(200分)(200分)

  • 主题发起人 主题发起人 fortun
  • 开始时间 开始时间
F

fortun

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样操作这种目录:最上面一层目录是以年份为单位建立的,下面的子目录是以月份为单位建立的
在子目录中,则是这一个月的文件,文件以天为单位(文件在这一天中也是不断变化的)。比如今
天的文件是在昨天建立的,这个月过去后,会增加下一个月的目录,然后依次增加文件。
我现在要读取文件中的内容(文件为文本文件),该如何实现呢?还有,如何获取目录
的创建时间呢?
 
第一层目录:CreateDir(Copy(FormatDateTime('yyyymmdd',Date),1,4)); //年
第二层目录:CreateDir(Copy(FormatDateTime('yyyymmdd',Date),1,6)); //月
第三层目录:CreateDir(Copy(FormatDateTime('yyyymmdd',Date),1,8)); //日
文件名也可以一样做。
这样就成了: 盘符:/路径/2000/200011/20001128
不用再获取目录创建的时间了吧?
 
是这样的,该目录是在另外一台计算机上面,相当于服务器。我没有权利修改,
只能访问。
 
那就是说这些目录是已经有了的,你不需要创建,只需要访问?
 
对,这些目录的更新是在服务器上面实现的。而我只需要访问下面的文件,同时还要
判断目录及文件的修改时间、创建时间等。
 
我来灌一桶!
用API函数GetFileInformationByHandle,函数声明如下
GetFileInformationByHandle(hFile: THandle;
var lpFileInformation: TbyHandleFileInformation): BOOL;
用来获取文件或文件夹的各种信息!关于函数的参数含义可以到Delphi的 MS SDK 帮助
里找,下面特意找了一个例子,比较长,复制下来吧,自己好好研究吧!
procedure TForm1.FileListBox1Change(Sender: TObject);
var
Security: TSecurityAttributes; // security attributes for the file
hFile: Integer; // holds the file handle
FileInfo: TByHandleFileInformation; // holds the file information
Intermediate: TFileTime; // holds a file time
SystemTime: TSystemTime; // holds the converted file time

FileType: DWORD; // holds the file type
AMPM: string; // morning/evening indicator
begin
{clear the status bar}
StatusBar1.SimpleText:= '';

{initialize the security information}
Security.nLength:=SizeOf(TSecurityAttributes);
Security.bInheritHandle:=FALSE;

{open the selected file for reading}
hFile:=CreateFile(PChar(FileListBox1.FileName), GENERIC_READ, 0, @Security,

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile <> INVALID_HANDLE_VALUE) then
begin
{retrieve the file information}
GetFileInformationByHandle(hFile,FileInfo);

{display the selected file's attributes}
checkBox1.Checked := BOOLEAN(FileInfo.dwFileAttributes and
FILE_ATTRIBUTE_ARCHIVE);
CheckBox2.Checked := BOOLEAN(FileInfo.dwFileAttributes and

FILE_ATTRIBUTE_DIRECTORY);
CheckBox3.Checked := BOOLEAN(FileInfo.dwFileAttributes and
FILE_ATTRIBUTE_HIDDEN);
CheckBox4.Checked := BOOLEAN(FileInfo.dwFileAttributes and
FILE_ATTRIBUTE_OFFLINE);
CheckBox5.Checked := BOOLEAN(FileInfo.dwFileAttributes and
FILE_ATTRIBUTE_READONLY);
CheckBox6.Checked := BOOLEAN(FileInfo.dwFileAttributes and

FILE_ATTRIBUTE_SYSTEM);
CheckBox7.Checked := BOOLEAN(FileInfo.dwFileAttributes and
FILE_ATTRIBUTE_NORMAL);
CheckBox8.Checked := BOOLEAN(FileInfo.dwFileAttributes and
FILE_ATTRIBUTE_TEMPORARY);

{display the file name}
Label1.Caption := ExtractFileName(FileListBox1.FileName);

{we must first convert the file time into the local file time,

and then convert this into the system time to get the correct
modification time}
FileTimeToLocalFileTime(FileInfo.ftLastWriteTime, Intermediate);
FileTimeToSystemTime(Intermediate, SystemTime);

{indicate morning or evening, and modify the time so we are
not displaying military standard}
if SystemTime.wHour>11 then AMPM := ' PM' else AMPM := ' AM';
if SystemTime.wHour>12 then SystemTime.wHour := SystemTime.wHour-12;

{display the time}
Label2.Caption := IntToStr(SystemTime.wMonth)+'/'+
IntToStr(SystemTime.wDay)+
'/'+IntToStr(SystemTime.wYear)+' '+
IntToStr(SystemTime.wHour)+':'+
IntToStr(SystemTime.wMinute)+':'+
IntToStr(SystemTime.wSecond)+AMPM;

{display the volume serial number}
Label8.Caption:=IntToStr(FileInfo.dwVolumeSerialNumber);

{display the file size}
Label4.Caption:=IntToStr(GetFileSize(hFile, nil))+ ' bytes';

{display the file type}
FileType:=GetFileType(hFile);
case (FileType) of
FILE_TYPE_UNKNOWN: Label6.Caption:='File is of unknown type';
FILE_TYPE_DISK : Label6.Caption:='File is disk based';
FILE_TYPE_CHAR : Label6.Caption:='File is a character file';
FILE_TYPE_PIPE : Label6.Caption:='File is a named or anonymous pipe';

end;

{we are through examining the file, so close the handle}
CloseHandle(hFile);
end
else
{if the file could not be opened, indicate that it is in use}
StatusBar1.SimpleText:= 'File is in use';
end;
 
把根目录映射一个驱动器啊。
 
谢谢seachild2000,不过我试了一下,怎么得不到目录的时间啊,只能得到文件的时间。
 
回BaKuBaKu
我是考虑映射驱动器,但是目录以及文件的更新不是我能控制的啊,我要判断是否已经更新
然后再做相应的处理,比如从文本文件中读取数据。
 
好啦,研究了半小时API,下面的例子可以取出文件夹和文件的创建时间了,
PathName.Text 里存放的是文件名称或文件夹名称!

procedure TForm1.Button1Click(Sender: TObject);
var
FindFileData :Twin32findData;
SearchHandle:Thandle;
FileInfo: TByHandleFileInformation;
Intermediate: TFileTime; // holds a file time
SystemTime: TSystemTime;
begin
searchHandle:=FindFirstFile(Pchar(PathName.Text),FindFileData);
if searchHandle<>INVALID_HANDLE_VALUE then begin
FileTimeToLocalFileTime(FindFileData.ftCreationTime, Intermediate);
FileTimeToSystemTime(Intermediate, SystemTime);
showmessage(Datetimetostr(SystemTimeToDateTime(SysTemTime)));//得到文件夹的创建时间
end
else begin
showmessage('Error');
exit;
end;
end;
 
接受答案了.
 
后退
顶部