请问copy一个大字符串是不是很花时间 ( 积分: 30 )

  • 主题发起人 主题发起人 我爱PASCAL
  • 开始时间 开始时间
嘿嘿!加密某些大的文件到一个文件中,磁盘就
是内存啊!没有必要全部读进内存!所有压缩软件: WinZIP,WinRAR都市
把磁盘当内存,Windows操作系统也一样,所以你可以边读,边操作(加密或压缩),边
回写即可!呵呵!
 
回 wql
你说的用两个Tfilestream就可以简单做到,但仍然要对文件做从新的写入操作.
 
to 我爱PASCAL
呵呵, 链表结构啊, 两个指针操作就搞定了
 
to bms:
回 wql
你说的用两个Tfilestream就可以简单做到,但仍然要对文件做从新的写入操作.

我没有说要用两个Tfilestream啊!
而是直接文件操作

{$I-}
Var
sFl: File;
tFl: File;
TmI:Integer;
_Buf:Packed Array [1..16384] Of Byte;
begin
AssignFile(sFl,'c:/source.1');
AssignFile(tFl,'c:/target.1');
ReSet(sFl,1);
ReWrite(tFl,1);
While Not Eof(sFl) Do
Begin
BlockRead(sFl,_Buf,SizeOf(_Buf),TmI);
BlockWrite(tFl,_Buf,TmI,TmI);
End;
Close(sFl);
Close(tFl);
就完成了一个文件的拷贝过程!若前面要加信息,例如
'This file builded by 我爱PASCAL',可以:
Var
MyMsg : String;
SetLengTh(MyMsg,168);
MyMsg:='This file builded by 我爱PASCAL'#13#10#26;

ReSet(sFl,1);
ReWrite(tFl,1);
BlockWrite(tFl,MyMsg[1],LengTh(MyMsg),TmI);
While Not Eof(sFl) Do
Begin
BlockRead(sFl,_Buf,SizeOf(_Buf),TmI);
... ...
就可以了啊!
嘿嘿!
还可以加其他文件!
不要关闭 tFl,
继续循环sfl的AssignFile
即可把多个文件写入到 tFl中了啊!

其他的加密,压缩,就可以在
BlockRead()操作后对_Buf惊醒即可!啊!啊!啊!啊!
end;
 
to wql
晕! 用Tfilestream也好用直接读写文件也好,都要把原文件从新写到硬盘上,就拿你的代码来说,同样重新写文件到硬盘,若这个文件很大,比如1g同样要花蛮多时间.你都没理解楼主所想要的是什么! "我爱PASCAL&quot
经常看到,他的功力这些方法他应该早据试过了.楼上和多人的都是同样的.
 
看来还是楼上的朋友知道我的意思,不过我“功力”很菜,文件读写这个正在学习中,在大富翁们的帮助下“功力”稳步增长中。

还有你提到要用到操作系统的文件结构,这个应该可以吧,在DOS下有详细介绍的,在WINDOWS下不知有没有这样的API函数。
 
晕菜,讨论那么多,不就要复制一个指针的问题?
var
str:string;
p:pchar
begin
str:='1234567890';
p:=pchar(str);
Label1.Caption:=p+3;
end;

试试
 
to:wql
加文件头很容易,可是零费时加文件头就不容易了。
如果不行,我可能要将文件头放到文件尾了。
 
如果仅仅是加文件头, 操作系统应该提供了优化的方案.
不过类似比如 1 G 的东西, 应该不会慢的, 你看比如休眠功能用到的 page 文件, 1 G 的也没见它慢啊.
如果是类似于压缩等需要读入写入的操作, 我觉得普通文件操作+自定义缓冲功能肯定就行了
我记得我曾经写过一个压缩程序, 在 486 + 16M 内存的机器上也照样压缩超过 1G 的文件, 速度还非常快呢
如果实在不行, 还可以操作他的文件结构啊, 不过这个可比较麻烦一些, 文件系统的类型可多了去了
 
嘿嘿!
就连Windows操作系统都和我的方法一样做!你难道说Bill也是傻瓜了!
试一下:
1. 软驱插入空白软盘!
2. 复制一个1M左右的文件!
3. 立即粘贴到软盘!出现拷贝界面(飞的文件)时立即关机!
4. 拿出软盘,重新启动电脑!
5. 放进软盘!看看已近有一个1M的文件存在!
6. 但是实际仅仅拷贝了实际文件的一小点!
嘿嘿!知道设么原因吗?
Windows也是在磁盘上先分配大文件(大字符串)内存!
 
若对时间要求很严格,那就不能指望在头部加信息而几乎不费时间(还没有看到哪个文件
系统支持两头增长的)。能在尾部加是最好。
看起来楼主似乎是想对文件进行一些“防护”——我的建议是这样——对文件头的少量信
息进行加密(长度不变的那种),然后将附加的信息放在尾部。这样依赖于文件头识别的软
件就会认为是非法文件,而您的工具还能依靠文件尾部的信息进行正确的还原——并且效率
非常高。
 
楼上所说正如我想,不过我还要加密头尾1K区,因为好像有的文件也喜欢把信息放在尾部。
我的目的是高速加密多媒体文件。
 
用文件读取,分段放入内存流
 
后退
顶部