你可以将*.mdb文件改为任何扩名,没关系的
解决方案 »
- delphi前景咋樣啊!!!!!!!我剛找了個delphi的工作!!!
- 鄙视发贴但不结贴的人
- 2个DBgrid + 1个删除按钮,如何判断,在点击按钮之前焦点是在哪个DBgrid中,以便针对不同的dataset做处理.
- ADSL 动态的ip地址怎么转移到网卡上???100分
- 我们在2000下开发了一套程序,但是在98编译通过,运行时提示试图用不正确的格式加载程序?????
- 请问IDNY里的IdFTPServer控件的什么函数或者属性可以知道是谁在连接我的FTP!就是想知道对方IP地址这样的信息!应该在什么地方?谢谢!
- 关于输入格式的问题
- ado+sql server创建的视图利用dbgrid怎么显示出来
- 怎样在delphi中实现像vb那样的debug输出?谢谢了!
- 如何在DELPHI中实现一大段文字一行一行地向上滚动。。。115分
- 有没有一个函数可以由tdatetime直接返回今天的天数,为integer或是word类型?
- 谁可以发给我一些通用的对数据库操作的函数?
如果是普通的二进制文件你不是想怎么存就怎么村吗?
如果你可以不用Delphi的话你可以用VC做很简单的
例如以下过程查看系统中所有的该结构的文件,并加入到TListview里:
procedure TForm1.AddFile(LV:TListview;SR:TSearchRec;Path:string);
var
FileInfo:TSHFileInfo;
begin
SHGetFileInfo(
PChar(Path+'\'+SR.Name) ,
0,
FileInfo,
SizeOf(FileInfo),
SHGFI_TYPENAME or SHGFI_SYSICONINDEX or SHGFI_ICON); with LV.Items.Add do
begin
ImageIndex:=FileInfo.iIcon;
Caption:=SR.Name;
with SubItems do
begin
if SR.Size<1024 then
Append(Format('%d bytes',[SR.Size]))
else
Append(Format('%d k',[Round(SR.Size/1024)]));
if FileInfo.szTypeName<>'' then
Append(FileInfo.szTypeName)
else
Append('该文件在系统中未注册');
Append(Path);
end;
end;
end;procedure TForm1.SearchFileStructure(Path:String);
var SR:TSearchRec;
SubDirList:TStrings; //子目录列表
i:integer;
begin
Application.ProcessMessages;
Screen.Cursor:=crHourGlass;
SubDirList:=TStringList.Create; //建立子目录列表
Caption:='正在查找...'+Path;
if FindFirst(Path+'\*.*', faDirectory ,SR) = 0 then
begin
if IsFold(SR) then
SubDirList.Add(SR.Name);
if StgIsStorageFile(PWideChar(WideString(Path+'\'+SR.Name)))=S_OK then
AddFile(View,SR,Path);
while FindNext(SR) = 0 do
begin
if IsFold(SR) then
SubDirList.Add(SR.Name);
if StgIsStorageFile(PWideChar(WideString(Path+'\'+SR.Name)))=S_OK then
AddFile(View,SR,Path);
end;
end;
FindClose(SR);
for i:=0 to SubDirList.Count-1 do //递归子目录
SearchFileStructure(Path+'\'+SubDirList[i]);
Screen.Cursor:=crDefault;
SubDirList.Free;
end;function IsFold(SR:TSearchRec):Boolean;
begin
if (SR.Attr=16) and (SR.Name<>'.') and (SR.Name<>'..') then
Result:=True
else
Result:=False;
end;查看结构化存储文件内部结构
procedure TForm1.RecurseStorage(ParentNode:TTreeNode;stg:IStorage);
var
EnumStatStg: IEnumStatStg;
StatStg: TStatStg;
NodeName: String;
ChildNode: TTreeNode;
StgChild : IStorage;
begin
OLECheck(stg.EnumElements(0,nil,0,EnumStatStg));while EnumStatStg.Next(1,StatStg,nil)=S_OK do
begin
NodeName:=StatStg.pwcsName;
if Ord(NodeName[1])<32 then
NodeName:='#'+IntToStr(Ord(NodeName[1]))+
Copy(NodeName,2,length(NodeName)-1);
{$IFDEF VER 100}
ChildNode:=StruTree.Items.AddChild(ParentNode,NodeName+
'('+FloatToStr(Statstg.cbSize)+'bytes)');
{$ELSE} ChildNode:=StruTree.Items.AddChild(ParentNode,NodeName+
'('+IntToStr(Statstg.cbSize)+'bytes)'); {$ENDIF} if StatStg.dwType=STGTY_STORAGE then
begin //注意这里打开子存储是 “OpenStorage”不是"stgOpenStorage"
OLECheck(stg.OpenStorage(StatStg.pwcsName,
nil,
STGM_READ or STGM_SHARE_EXCLUSIVE,
nil,0,stgChild));
// 递归处理子存储
RecurseStorage(ChildNode,stgChild);
end;
end; // whileend;
procedure TForm1.DisplayFileStructure(FileName:WideString);
var stgRoot: IStorage;
Node: TTreeNode;
begin
if StgIsStorageFile(PWideChar(FileName))<>S_OK then
begin
MessageDlg(Format('%s 不是一个结构化文件!'+#13+'或者未找到该文件',[FileName]),
mtWarning,
[mbOk],
0);
exit;
end;
OLECheck(stgOpenStorage(PWideChar(FileName),
nil,
STGM_READ or STGM_SHARE_EXCLUSIVE,
nil,
0,
stgRoot));
StruTree.Items.BeginUpdate; //StruTree :Treeview
try
StruTree.Items.Clear;
Node:= StruTree.Items.Add(nil,'根存储<Root>');
RecurseStorage(Node,stgRoot);
Node.Expand(True);
finally
StruTree.Items.EndUpdate;
end;
end;建立文件,并写入内容:
var w,h:integer;
stg: IStorage;
stmData: IStream;
OS: TOLEStream;
procedure TForm1.Button1Click(Sender: TObject);
var fn:PWideChar;
begin
w:=form1.Width ; h:=form1.Height;
if not SD.Execute then exit; //SD:TSaveDialog
fn:=PWideChar(WideString(SD.filename+'.liu'));
OLECheck(stgCreateDocFile(fn
,STGM_Create
or STGM_READWRITE
or STGM_SHARE_EXCLUSIVE
,0
,stg));
OLECheck(stg.CreateStream('info',STGM_CREATE or STGM_WRITE OR
STGM_SHARE_EXCLUSIVE,0,0,stmData));
OLECheck(stg.OpenStream('info',nil,STGM_READWRITE or
STGM_SHARE_EXCLUSIVE,0,stmData));
OS:=TOLEStream.Create(stmData);
try
Image1.Picture.Graphic.SaveToStream(OS); //将TImage的内容写入到OS
Richedit1.Lines.SaveToStream(OS); //将TRichEdit的内容写入到OS
OS.Write(w,sizeof(w));
OS.Write(h,sizeof(h));
finally
OS.Free;
end;end;读出内容:
procedure TForm1.Button2Click(Sender: TObject);
var fn:PWideChar;
begin
if not OD.Execute then exit; //OD :TOpenDialog
fn:=PWideChar(WideString(OD.filename));
OLECheck(stgOpenStorage(fn,nil,STGM_READWRITE or
STGM_SHARE_EXCLUSIVE,nil,0,stg));
stg.OpenStream('info',nil,STGM_READ or STGM_SHARE_EXCLUSIVE,0,stmData);
OS:=TOLEStream.Create(stmData);
try
Image1.Picture.Graphic.LoadFromStream(OS);
Richedit1.Lines.LoadFromStream(OS);
OS.Read(w,sizeof(w));
OS.Read(h,sizeof(h));
width:=w;
h:=height;
finally
OS.Free;
end;end;