一、本文功能需要两个程序:
1、被写入图片的exe,启动后读取自身尾部图片数据并显示。
2、执行写入操作的exe,往被写入exe尾部添加图片数据。
二、被写入端代码:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="被写入端";right=489;bottom=319)
mainForm.add(
plus={cls="plus";left=10;top=10;right=480;bottom=310;edge=1;z=1}
)
/*}}*/
mainForm.show();
import fsys.file
var file = fsys.file(io._exepath,"r"); // 打开文件自身
file.seek("end",-4);
var flag = file.read(-1); // 读取追加标记,
if flag == "APND" { // 如果末尾不是"APND"则代表未被追加
file.seek("end",-8);
var len = file.read({int number}).number; // 读取追加的数据长度
if len {
file.seek("end",-8-len)
var pic = file.read(len); // 读取追加的数据
mainForm.plus.foreground = pic; //显示数据
}
}
file.close(); // 关闭文件句柄
return win.loopMessage();
被写入前运行效果:
被写入后运行效果:
三、写入端代码:
import win.ui;
/*DSG{{*/
mainForm = win.form(text="追加图片";right=757;bottom=467)
mainForm.add(
button={cls="button";text="选择图片";left=470;top=80;right=700;bottom=170;z=2};
button2={cls="button";text="追加到文件尾部";left=470;top=230;right=700;bottom=320;z=3};
plus={cls="plus";left=60;top=40;right=430;bottom=350;z=1}
)
/*}}*/
var picfile;
mainForm.button.oncommand = function(id,event){
import fsys.dlg
picfile = fsys.dlg.open("*.*","请选择图片文件")
mainForm.plus.foreground = picfile;
}
mainForm.button2.oncommand = function(id,event){
if !picfile return win.msgbox("先选图片");
import fsys.dlg
var exefile = fsys.dlg.open("*.exe|*.exe","请选择exe文件");
if exefile {
var pic = ..string.load(picfile);
import fsys.file;
var file = fsys.file(exefile,"a+");
file.seek("end");
file.write(pic);//图片数据
file.writeBuffer(raw.buffer({int v=#pic})); //数据长度
file.write("APND"); //被追加标记
file.close();
win.msgbox("写入完毕,将运行目标exe文件");
import process
process(exefile);
}
}
mainForm.show();
return win.loopMessage();
四、流程:
1、编译“被写入端”为exe文件,暂且命名为“被写入端.exe”
2、运行写入端,选择要追加的图片:
3、点击“追加到文件尾部”,选择“被写入端.exe”完成追加。
五、其他:
1、可多次追加,多次读取。感兴趣的可自己进行改造。
2、可对追加数据进行加密、解密操作。