最可能原因是编程不规范,一些.h文件在不同的.c.h文件中重复定义。
一.软件说明
中文菜单系统包括以下文件:
菜单启动文件:START.BAT (由安装程序自动生成)。
菜单程序文件:MENUSTAR.EXE。
菜单配置文件:MENUSTAR.CFG。
菜单数据文件:MENUSTAR.DAT。
菜单字库文件:MENUSTAR.FNT。
菜单求助文件:MENUSTAR.HLP。
安装程序文件:INTSALL.EXE。
说明程序文件:README.EXE。
说明文本文件:README.TXT。
鼠标驱动程序:MOUSE.COM。
二.使用方法
1.菜单系统安装和操作方法。
在软盘上执行安装程序文件INSTALL.EXE进行系统安装,设置好目标驱动。
器后就可以开始系统安装。安装完成后根据您的电脑的实际情况来编辑菜单。
配置文件和主数据文件(注意其格式要求)。编辑完成后就可以执行菜单。
启动文件来启动菜单系统,启动菜单以后您必须对编辑的每一个菜单项目进。
行测试,确定它们是否达到了预定的效果,如果出现问题,那么肯定是菜单。
配置文件和主数据文件中有错误存在,改正这些错误后再运行,如此反复直。
到完全正确为止。最后将菜单启动文件加入到单机用户的自动批处理或网络。
用户登录原稿中,就完成了此项工作。
2.菜单配置文件的编辑方法。
现行的编辑软件(如WPS,EDIT等)都可用来编辑菜单配置。
文件:MENUSTAR.CFG。
具体方法如下:
第一行为菜单窗口名称,第二行至 n 行为分类菜单名称。
例如建立游戏菜单则菜单配置文件格式如下:
TITLE=游戏菜单。
网络游戏。
策略游戏。
...。
...。
...。
其它游戏。
注意事项:
a.每列之间不允许有空格。
b.每行之前不允许有空格。
c.每行之间不允许有空行。
3.菜单数据文件的编辑方法。
现行的编辑软件(如WPS,EDIT等)都可用来编辑菜单数据文件。
MENUSTAR.DAT。
具体方法如下:
第一行为项目名称,第二行为你所要运行的DOS命令或项目程序名称,
第三行为项目类型。做好了这三项您就完成了一个菜单项目的编辑工作,
然后以此类推来编辑所有的菜单项目。
项目编辑例子:
┏━━━━━━━━━━━━━━━━┯━━━━━━━━━━━━━━┓。
┃ 格式一: │ 格式二: ┃。
┃ TITLE=仙剑奇侠传 │ 标题=仙剑奇侠传 ┃。
┃ COMMAND=C:\PAL;PAL; │ 命令=C:\PAL;PAL; ┃。
┃ TYPE=1 │ 类型=1 ┃。
┗━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━┛。
说明:
两种格式区别在于格式命令一种是英文,另一种是中文,用户可。
任选一种使用,也可以混合使用。
菜单数据文件格式示例:
TITLE=仙剑奇侠传。
COMMAND=C:\PAL;PLAY;。
TYPE=1。
TITLE=天龙八部。
COMMAND=C:\TL8;PLAY;。
TYPE=1。
标题=红色警戒。
命令=C:\RED;RUNGAME;。
类型=2。
...。
...。
...。
TITLE=三国志五代。
COMMAND=C:\SAN5;SAN5;。
TYPE=3。
注意事项:
a.每列之不允许有空格。
b.每行之前不允许有空格。
c.每行之间不允许有空行。
d.项目程序包括所有可执行的以COM、EXE、BAT为扩展名的文件,
COMMAND格式命令后可以写多个DOS命令和项目程序名,但是每。
句后面必须以";"结束。切记!(不要忘了最后一个分号)
4.菜单使用方法
a.键盘操作方法:
1.上下光标键选择项目。
2.回车或空格键执行项目。
3.数字键选择项目类别。
4.PageUp 向上翻页。
5.PageUp 向下翻页。
6.F1 可获得帮助。
b.鼠标操作方法
1.点击项目类别框选择项目类别。
2.点击项目可以执行。
3.点击翻页框可进行翻页操作。
下载: http://www.blog.edu.cn/UploadFiles/2006-8/811710740.zip。
注:本人使用经验,在安装时要把安装盘中MYSOFT文件夹中的两个批处理文件中的"g"改为要安装的盘符如“C”,要不然菜单批处理文件可能无法生成。
几个重要文件写法:
cfg文件:
title=无忧启动 一碟在手 装机维护 轻松搞定 。
1.分区管理
2.系统备份
3.数据管理
4.常用工具
5.安装系统
6.退出菜单
start.bat文件
@ECHO OFF
REM 在提示符状态,执行MENU可重新进入循环菜单。
SET SETIF=EXITMENU。
GOTO G
:G
%RAMD%:
CD \
MENUSTAR
CALL GOMENU.BAT。
IF %SETIF%==DOS GOTO END。
IF %SETIF%==TW GOTO TW。
IF %SETIF%==DN GOTO DN。
IF %SETIF%==RESTART GOTO RESTART。
GOTO G
:TW
TW.EXE /Q > NUL。
GOTO G
:DN
TW.EXE /Q > NUL。
GOTO END
:RESTART
RESTART
GOTO END
:END
%RAMD%:
CD \
dat文件
title=Partition Magic 6.0。
command=CPM.BAT;。
type=1
title=Server Magic 4.0。
command=CSM.BAT;。
type=1
title=Drive Image Pro 4.0。
command=CPQDI.BAT;。
type=2
title=Lost&Found 1.06 。
command=LF.BAT;。
type=3
title=KV3000病毒检测。
command=KV3000.BAT;。
type=4
title=Win2000 Pro (3in1)。
command=2000PRO.BAT;。
type=5
title=启动 UCDOS
command=UP.BAT;。
type=6
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK。
按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。
对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
[java] view plaincopy。
File file = new File(path); 。
InputStream in= new java.io.FileInputStream(file); 。
byte[] b = new byte[3]; 。
in.read(b);
in.close();
if (b[0] == -17 && b[1] == -69 && b[2] == -65)。
System.out.println(file.getName() + ":编码为UTF-8"); 。
else
System.out.println(file.getName() + ":可能是GBK,也可能是其他编码"); 。
2:若想实现更复杂的文件编码检测,可以使用一个开源项目cpdetector,它所在的网址是:http://cpdetector.sourceforge.net/。它的类库很小,只有500K左右,cpDetector是基于统计学原理的,不保证完全正确,利用该类库判定文本文件的代码如下:
读外部文件(先利用cpdetector检测文件的编码格式,然后用检测到的编码方式去读文件):。
[java] view plaincopy。
/**
* 利用第三方开源包cpdetector获取文件编码格式。
* @param path
* 要判断文件编码格式的源文件的路径。
* @author huanglei。
* @version 2012-7-12 14:05。
*/
public static String getFileEncode(String path) {。
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的。
* 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar。
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();。
/*
* ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于。
* 指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new ParsingDetector(false));。
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码。
* 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以。
* 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar。
// ASCIIDetector用于ASCII编码测定。
detector.add(ASCIIDetector.getInstance());。
// UnicodeDetector用于Unicode家族编码的测定。
detector.add(UnicodeDetector.getInstance());。
java.nio.charset.Charset charset = null;。
File f = new File(path);。
try {
charset = detector.detectCodepage(f.toURI().toURL());。
} catch (Exception ex) {。
ex.printStackTrace();。
if (charset != null)。
return charset.name();。
else
return null;
}
[java] view plaincopy。
String charsetName = getFileEncode(configFilePath); 。
System.out.println(charsetName); 。
inputStream = new FileInputStream(configFile); 。
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName)); 。
读jar包内部资源文件(先利用cpdetector检测jar内部的资源文件的编码格式,然后以检测到的编码方式去读文件):
[java] view plaincopy。
/**
* 利用第三方开源包cpdetector获取URL对应的文件编码。
* @param path
* 要判断文件编码格式的源文件的URL。
* @author huanglei。
* @version 2012-7-12 14:05。
*/
public static String getFileEncode(URL url) {。
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的。
* 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar。
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();。
/*
* ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于。
* 指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new ParsingDetector(false));。
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码。
* 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以。
* 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar。
// ASCIIDetector用于ASCII编码测定。
detector.add(ASCIIDetector.getInstance());。
// UnicodeDetector用于Unicode家族编码的测定。
detector.add(UnicodeDetector.getInstance());。
java.nio.charset.Charset charset = null;。
try {
charset = detector.detectCodepage(url);。
} catch (Exception ex) {。
ex.printStackTrace();。
if (charset != null)。
return charset.name();。
else
return null;
}
[java] view plaincopy。
URL url = CreateStationTreeModel.class.getResource("/resource/" + "配置文件"); 。
URLConnection urlConnection = url.openConnection(); 。
inputStream=urlConnection.getInputStream(); 。
String charsetName = getFileEncode(url); 。
System.out.println(charsetName); 。
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, charsetName)); 。
3:探测任意输入的文本流的编码,方法是调用其重载形式:
[java] view plaincopy。
charset=detector.detectCodepage(待测的文本输入流,测量该流所需的读入字节数); 。
上面的字节数由程序员指定,字节数越多,判定越准确,当然时间也花得越长。要注意,字节数的指定不能超过文本流的最大长度。
4:判定文件编码的具体应用举例:
属性文件(.properties)是Java程序中的常用文本存储方式,象STRUTS框架就是利用属性文件存储程序中的字符串资源。它的内容如下所示:
#注释语句
属性名=属性值
读入属性文件的一般方法是:
[java] view plaincopy。
FileInputStream ios=new FileInputStream(“属性文件名”); 。
Properties prop=new Properties(); 。
prop.load(ios); 。
String value=prop.getProperty(“属性名”); 。
ios.close();
利用java.io.Properties的load方法读入属性文件虽然方便,但如果属性文件中有中文,在读入之后就会发现出现乱码现象。发生这个原因是load方法使用字节流读入文本,在读入后需要将字节流编码成为字符串,而它使用的编码是“iso-8859-1”,这个字符集是ASCII码字符集,不支持中文编码,
方法一:使用显式的转码:
[java] view plaincopy。
String value=prop.getProperty(“属性名”); 。
String encValue=new String(value.getBytes(“iso-8859-1″),”属性文件的实际编码”);。
方法二:象这种属性文件是项目内部的,我们可以控制属性文件的编码格式,比如约定采用Windows内定的GBK,就直接利用”gbk”来转码, 如果约定采用UTF-8,就使用”UTF-8″直接转码。
方法三:如果想灵活一些,做到自动探测编码,就可利用上面介绍的方法测定属性文件的编码,从而方便开发人员的工作。
补充:可以用下面代码获得Java支持编码集合:
Charset.availableCharsets().keySet();。
可以用下面的代码获得系统默认编码:
Charset.defaultCharset();。
Linux中的ftp服务器一般是安装vsftp。以centos为例,具体操作如下:
1、运行yum install vsftpd命令 。
命令具体的细节如下:
[root@banyue.net]# yum install vsftpd 。
Setting up Install Process 。
Parsing package install arguments 。
Resolving Dependencies 。
–> Running transaction check 。
—> Package vsftpd.i386 0:2.0.5-12.el5 set to be updated 。
filelists.xml.gz 100% |=========================| 648 kB 02:46 。
http://ftp.hostrino.com/pub/centos/5.2/os/i386/repodata/filelists.xml.gz: [Errno 4] Socket Error: timed out 。
Trying other mirror. 。
filelists.xml.gz 100% |=========================| 2.8 MB 00:21 。
filelists.xml.gz 100% |=========================| 1.1 MB 00:12 。
filelists.xml.gz 100% |=========================| 132 kB 00:01 。
filelists.xml.gz 100% |=========================| 150 B 00:00 。
–> Finished Dependency Resolution。
Dependencies Resolved 。
============================================================================= 。
Package Arch Version Repository Size 。
============================================================================= 。
Installing:
vsftpd i386 2.0.5-12.el5 base 137 k。
Transaction Summary 。
============================================================================= 。
Install 1 Package(s) 。
Update 0 Package(s) 。
Remove 0 Package(s) 。
Total download size: 137 k 。
Is this ok [y/N]: y 。
Downloading Packages: 。
(1/1): vsftpd-2.0.5-12.el 100% |=========================| 137 kB 00:01 。
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897 。
Importing GPG key 0xE8562897 “CentOS-5 Key (CentOS 5 Official Signing Key) <centos-5-key@centos.org>” from http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5 。
Is this ok [y/N]: y 。
Running rpm_check_debug 。
Running Transaction Test 。
Finished Transaction Test 。
Transaction Test Succeeded 。
Running Transaction 。
Installing: vsftpd ######################### [1/1]。
Installed: vsftpd.i386 0:2.0.5-12.el5 。
Complete!
[root@localhost ~]# 。
2、将 /etc/vsftpd/user_list文件和/etc/vsftpd/ftpusers文件中的root这一行注释掉 。
#root
3、执行以下命令
# setsebool -P ftpd_disable_trans=1。
修改/etc/vsftpd/vsftpd.conf,在最后一行处添加local_root=/。
4、/sbin/service iptables stop (linux是虚拟机的话要运行这个一句)。
5、/sbin/service vsftpd restart。
一下是对配置文件中一些参数的说明: 。
centOS vsftpd建FTP,配置文件有三: 。
/etc/ftpusers
/etc/vsftpd.user_list 。
/etc/vsftpd/vsftpd.conf 这个是主配置文件,,。
/etc/vsftpd/vsftpd.conf vsftpd.conf 默认配置:。
anonymous_enable=YES 允许匿名登录。
local_enable=YES 允许本地用户登录 。
write_enable=YES 开放本地用户写权限 。
local_umask=022 设置本地用户生成文件的掩码为022 。
#anon_upload_enable=YES 此项设置允许匿名用户上传文件 。
#anon_mkdir_write_enable=YES 开启匿名用户的写和创建目录的权限 。
dirmessage_enable=YES 当切换到目录时,显示该目录下的.message隐藏文件的内容 。
xferlog_enable=YES 激活上传和下载日志 。
connect_from_port_20=YES 启用FTP数据端口的连接请求 。
#chown_uploads=YES 是否具有上传权限. 用户由chown_username参数指定。
#chown_username=whoever 指定拥有上传文件权限的用户。此参数与chown_uploads联用。
#xferlog_file=/var/log/vsftpd.log 。
xferlog_std_format=YES 使用标准的ftpd xferlog日志格式 。
#idle_session_timeout=600 此设置将在用户会话空闲10分钟后被中断 。
#data_connection_timeout=120 将在数据连接空闲2分钟后被中断 。
#ascii_upload_enable=YES 启用上传的ASCII传输方式 。
#ascii_download_enable=YES 启用下载的ASCII传输方式 。
#ftpd_banner=Welcome to blah FTP service 设置用户连接服务器后显示消息 。
#deny_email_enable=NO 。
此参数默认值为NO。当值为YES时,拒绝使用banned_email_file参数指定文件中所列出的e-mail地址用户登录。
#banned_email_file=/etc/vsftpd.banned_emails 指定包含拒绝的e-mail地址的文件. 。
#chroot_list_enable=YES 设置本地用户登录后不能切换到自家目录以外的别的目录 。
#chroot_list_file=/etc/vsftpd.chroot_list 。
#ls_recurse_enable=YES 。
pam_service_name=vsftpd 。
设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/ 。
userlist_enable=YES 。
此项配置/etc/vsftpd.user_list中指定的用户也不能访问服务器,若添加userlist_deny=No,则仅仅/etc /vsftpd.user_list。
文件中的用户可以访问,其他用户都不可以访问服务器。如过 userlist_enable=NO,userlist_deny=YES,则指定使文件/etc/vsftpd.user_list中指定的用户不可以访问服务器,其他本地用户可以访问服务器。
listen=YES 指明VSFTPD以独立运行方式启动 。
tcp_wrappers=YES 在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES。
修改一下版本号就好了。
不过这个官方的qq for linux太垃圾了,什么功能都没有。我现在用的Pidgin+webqq的插件,好像叫lwqq吧,忘记了,能用,至少不封号。ubuntu论坛里有wine的qq,功能最全。还有pywebqq,webqq,qtqq等等很多,看你喜欢哪个了。