读写properties配置文件时带上注释

读写properties配置文件时带上注释
读写properties配置文件时带上注释

Java使用jdk自带的类操作properties配置文件,特别是更改文件后会把注释全部删掉,再读时会不知道配置是什么意思,下面这个类是我自己写的不删除注释操作properties的类。

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStreamWriter;

import java.io.Reader;

import java.io.Writer;

import java.util.Date;

import java.util.HashMap;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Properties;

import java.util.Set;

/**

* 读取Properties配置文件,同时读出注释。注释在jdk源方法的LineReader中忽略,

*

* 此处改造LineReader,并添加存放的变量map

*

* 同时新加了getPropertyAndComment(key)方法,返回的字符串:如果有注释则为:值#注释,如果无注释,则为:值

*

* 写入Properties方法是直接从网上下载的方法

* @author liuwei

* */

public class ReadAndWriteProperties extends Properties {

/**

*

*/

private static final long serialVersionUID = 1L;

public static void main(String[] args) throws Exception {

//写入

// ReadAndWriteProperties properties = new ReadAndWriteProperties();

// FileOutputStream fileOutputStream = new FileOutputStream(

// "D:/test.properties", true);

// OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream);

// for (int i = 1; i < 10; i++) {

// String string = String.valueOf(i);

// properties.setP("Name" + string, string, "the name of " + string);

// }

// properties.orderStore(writer, "This is a test process...");

//读取

ReadAndWriteProperties props = new ReadAndWriteProperties();

File file = new File("E:\\test\\CemsMiddleware.properties");

InputStream in = new FileInputStream(file);

props.load(in);

Set keySet = props.keySet();

Object value = null;

for (Object key : keySet) {

// value = props.getProperty((String) key);

value = props.getPropertyAndComment((String) key);

System.out.println(key + ":" + value);

}

}

private LinkedHashMap commentMap = new LinkedHashMap();

//首先是写相关--------------------------------------

/**

* Constructor.

*/

public ReadAndWriteProperties() {

super();

}

/**

* Constructor.

*

* @param properties

* the java propertis.

*/

public ReadAndWriteProperties(Properties properties) {

super(properties);

// Initialize the comment.

Iterator iterator = properties.keySet().iterator();

while (iterator.hasNext()) {

Object key = iterator.next();

https://www.360docs.net/doc/8214074607.html,mentMap.put((String) key, null);

}

/**

* Add comment to a property.

*

* @param key

* the key of the property.

* @param comment

* the comment of the property.

* @return true => add it false => don't have this key.

*/

public boolean addComment(String key, String comment) { if (this.contains(key)) {

https://www.360docs.net/doc/8214074607.html,mentMap.put(key, comment);

return true;

}

return false;

}

/**

* To set property.

*

* @param key

* the key of property.配置项名

* @param value

* the value of property.配置项值

* @param comment

* the comment of property.注释

*/

public void setP(String key, String value, String comment) { https://www.360docs.net/doc/8214074607.html,mentMap.put(key, comment);

this.setProperty(key, value);

}

public void getP(String key, String value, String comment) { https://www.360docs.net/doc/8214074607.html,mentMap.put(key, comment);

this.setProperty(key, value);

}

/**

* To output according to the order of input.

* @param writer

* the writer

* @param comments

* the comments of this property file.

* @throws IOException

* exception.

*/

public void orderStore(Writer writer, String comments) throws IOException {

BufferedWriter bufferedWriter = (writer instanceof BufferedWriter) ? (BufferedWriter) writer

: new BufferedWriter(writer);

if (comments != null) {

ReadAndWriteProperties.writeComments(bufferedWriter, comments);

}

bufferedWriter.write("#" + new Date().toString());

bufferedWriter.newLine();

bufferedWriter.newLine();

synchronized (this) {

Iterator iterator = https://www.360docs.net/doc/8214074607.html,mentMap.keySet().iterator();

while (iterator.hasNext()) {

String key = iterator.next();

String value = this.getProperty(key);

String comment = https://www.360docs.net/doc/8214074607.html,mentMap.get(key);

key = saveConvert(key, true, false);

value = saveConvert(value, false, false);

key = saveConvert(key, true, false);

if (comment != null && !comment.equals("")) {

writeComments(bufferedWriter, comment);

}

bufferedWriter.write(key + "=" + value);

bufferedWriter.newLine();

bufferedWriter.newLine();

}

}

bufferedWriter.flush();

}

private String saveConvert(String theString, boolean escapeSpace,

boolean escapeUnicode) {

int len = theString.length();

int bufLen = len * 2;

if (bufLen < 0) {

bufLen = Integer.MAX_VALUE;

}

StringBuffer outBuffer = new StringBuffer(bufLen);

for (int x = 0; x < len; x++) {

char aChar = theString.charAt(x);

// Handle common case first, selecting largest block that // avoids the specials below

if ((aChar > 61) && (aChar < 127)) {

if (aChar == '\\') {

outBuffer.append('\\');

outBuffer.append('\\');

continue;

}

outBuffer.append(aChar);

continue;

}

switch (aChar) {

case ' ':

if (x == 0 || escapeSpace)

outBuffer.append('\\');

outBuffer.append(' ');

break;

case '\t':

outBuffer.append('\\');

outBuffer.append('t');

break;

case '\n':

outBuffer.append('\\');

outBuffer.append('n');

break;

case '\r':

outBuffer.append('\\');

outBuffer.append('r');

break;

case '\f':

outBuffer.append('\\');

outBuffer.append('f');

break;

case '=': // Fall through

case ':': // Fall through

case '#': // Fall through

case '!':

outBuffer.append('\\');

outBuffer.append(aChar);

break;

default:

if (((aChar < 0x0020) || (aChar > 0x007e)) & escapeUnicode) {

outBuffer.append('\\');

outBuffer.append('u');

outBuffer.append(toHex((aChar >> 12) & 0xF));

outBuffer.append(toHex((aChar >> 8) & 0xF));

outBuffer.append(toHex((aChar >> 4) & 0xF));

outBuffer.append(toHex(aChar & 0xF));

} else {

outBuffer.append(aChar);

}

}

}

return outBuffer.toString();

}

/*

* !!!Copy from java source code.

*/

private static void writeComments(BufferedWriter bw, String comments) throws IOException {

bw.write("#");

int len = comments.length();

int current = 0;

int last = 0;

char[] uu = new char[6];

uu[0] = '\\';

uu[1] = 'u';

while (current < len) {

char c = comments.charAt(current);

if (c > '\u00ff' || c == '\n' || c == '\r') {

if (last != current)

bw.write(comments.substring(last, current));

if (c > '\u00ff') {

uu[2] = toHex((c >> 12) & 0xf);

uu[3] = toHex((c >> 8) & 0xf);

uu[4] = toHex((c >> 4) & 0xf);

uu[5] = toHex(c & 0xf);

bw.write(new String(uu));

} else {

bw.newLine();

if (c == '\r' && current != len - 1

&& comments.charAt(current + 1) == '\n') {

current++;

}

if (current == len - 1

|| (comments.charAt(current + 1) != '#' && comments

.charAt(current + 1) != '!'))

bw.write("#");

}

last = current + 1;

}

current++;

}

if (last != current)

bw.write(comments.substring(last, current));

bw.newLine();

}

/*

* !!! Copy from java source code.

*/

private static char toHex(int nibble) {

return hexDigit[(nibble & 0xF)];

}

/** A table of hex digits */

private static final char[] hexDigit = { '0', '1', '2', '3', '4', '5', '6',

'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

// 以下是读相关-----------------------------------------------------

Map comments = new HashMap();

public String getPropertyAndComment(String key) {

Object oval = super.get(key);

String sval = (oval instanceof String) ? (String) oval : null;

String coment = comments.get(key);

String co = coment == null ? "" : coment;

// System.out.println(key+":"+coment);

return ((sval == null) && (defaults != null)) ? defaults

.getProperty(key) + co : sval + co;

}

/**

* jdk源方法

* */

public synchronized void load(InputStream inStream) throws IOException { load0(new LineReader(inStream));

}

/**

* jdk源方法,经改造后不忽略注释

* */

private void load0(LineReader lr) throws IOException {

char[] convtBuf = new char[1024];

int limit;

int keyLen;

int valueStart;

char c;

boolean hasSep;

boolean precedingBackslash;

String coment = "";

while ((limit = lr.readLine()) >= 0) {

c = 0;

keyLen = 0;

valueStart = limit;

hasSep = false;

precedingBackslash = false;

// 注释相关

if ('#' == lr.lineBuf[0]) {

coment = loadConvert(lr.lineBuf, 0, limit, convtBuf);

coment = new String(coment.getBytes("iso8859-1"), "utf-8");

// System.out.println(coment);

continue;

}

// System.out.println("line=<" + new String(lineBuf, 0, limit) +

// ">");

while (keyLen < limit) {

c = lr.lineBuf[keyLen];

// need check if escaped.

if ((c == '=' || c == ':') && !precedingBackslash) {

valueStart = keyLen + 1;

hasSep = true;

break;

} else if ((c == ' ' || c == '\t' || c == '\f')

&& !precedingBackslash) {

valueStart = keyLen + 1;

break;

}

if (c == '\\') {

precedingBackslash = !precedingBackslash;

} else {

precedingBackslash = false;

}

keyLen++;

}

while (valueStart < limit) {

c = lr.lineBuf[valueStart];

if (c != ' ' && c != '\t' && c != '\f') {

if (!hasSep && (c == '=' || c == ':')) {

hasSep = true;

} else {

break;

}

}

valueStart++;

}

String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);

String value = loadConvert(lr.lineBuf, valueStart, limit

- valueStart, convtBuf);

put(key, value);

// 注释相关

if (coment != null && coment.length() > 0) {

comments.put(key, coment);

coment = "";// 重置注释

}

}

}

/**

* jdk源方法

* */

private String loadConvert(char[] in, int off, int len, char[] convtBuf) { if (convtBuf.length < len) {

int newLen = len * 2;

if (newLen < 0) {

newLen = Integer.MAX_VALUE;

}

convtBuf = new char[newLen];

}

char aChar;

char[] out = convtBuf;

int outLen = 0;

int end = off + len;

while (off < end) {

aChar = in[off++];

if (aChar == '\\') {

aChar = in[off++];

if (aChar == 'u') {

// Read the xxxx

int value = 0;

for (int i = 0; i < 4; i++) {

aChar = in[off++];

switch (aChar) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

value = (value << 4) + aChar - '0';

break;

case 'a':

case 'b':

case 'c':

case 'd':

case 'e':

case 'f':

value = (value << 4) + 10 + aChar - 'a';

break;

case 'A':

case 'B':

case 'C':

case 'D':

case 'E':

case 'F':

value = (value << 4) + 10 + aChar - 'A';

break;

default:

throw new IllegalArgumentException(

"Malformed \\uxxxx encoding.");

}

}

out[outLen++] = (char) value;

} else {

if (aChar == 't')

aChar = '\t';

else if (aChar == 'r')

aChar = '\r';

else if (aChar == 'n')

aChar = '\n';

else if (aChar == 'f')

aChar = '\f';

out[outLen++] = aChar;

}

} else {

out[outLen++] = aChar;

}

}

return new String(out, 0, outLen);

}

class LineReader {

/**

* jdk源方法

* */

public LineReader(InputStream inStream) {

this.inStream = inStream;

inByteBuf = new byte[8192];

}

/**

* jdk源方法

* */

public LineReader(Reader reader) {

this.reader = reader;

inCharBuf = new char[8192];

}

byte[] inByteBuf;

char[] inCharBuf;

char[] lineBuf = new char[1024];

int inLimit = 0;

int inOff = 0;

InputStream inStream;

Reader reader;

/**

* jdk源方法,但经过改造,不再忽略注释

* */

int readLine() throws IOException {

int len = 0;

char c = 0;

boolean skipWhiteSpace = true;

boolean isCommentLine = false;

boolean isNewLine = true;

boolean appendedLineBegin = false;

boolean precedingBackslash = false;

boolean skipLF = false;

while (true) {

if (inOff >= inLimit) {

inLimit = (inStream == null) ? reader.read(inCharBuf)

: inStream.read(inByteBuf);

inOff = 0;

if (inLimit <= 0) {

if (len == 0 || isCommentLine) {

return -1;

}

return len;

}

}

if (inStream != null) {

// The line below is equivalent to calling a

// ISO8859-1 decoder.

c = (char) (0xff & inByteBuf[inOff++]);

} else {

c = inCharBuf[inOff++];

}

if (skipLF) {

skipLF = false;

if (c == '\n') {

continue;

}

}

if (skipWhiteSpace) {

if (c == ' ' || c == '\t' || c == '\f') {

continue;

}

if (!appendedLineBegin && (c == '\r' || c == '\n')) {

continue;

}

skipWhiteSpace = false;

appendedLineBegin = false;

}

if (isNewLine) {

isNewLine = false;

if (c == '#' || c == '!') {

// isCommentLine = true;

// continue;

}

}

if (c != '\n' && c != '\r') {

lineBuf[len++] = c;

if (len == lineBuf.length) {

int newLength = lineBuf.length * 2;

if (newLength < 0) {

newLength = Integer.MAX_VALUE;

}

char[] buf = new char[newLength];

System.arraycopy(lineBuf, 0, buf, 0, lineBuf.length);

lineBuf = buf;

}

// flip the preceding backslash flag

if (c == '\\') {

precedingBackslash = !precedingBackslash;

} else {

precedingBackslash = false;

}

} else {

// reached EOL

if (isCommentLine || len == 0) {

isCommentLine = false;

isNewLine = true;

skipWhiteSpace = true;

len = 0;

continue;

}

if (inOff >= inLimit) {

inLimit = (inStream == null) ? reader.read(inCharBuf)

: inStream.read(inByteBuf);

inOff = 0;

if (inLimit <= 0) {

return len;

}

}

if (precedingBackslash) {

len -= 1;

// skip the leading whitespace characters in following

// line

skipWhiteSpace = true;

appendedLineBegin = true;

precedingBackslash = false;

if (c == '\r') {

skipLF = true;

}

} else {

return len;

}

}

}

}

}

}

INI文件读写

INI文件读写.txt男人的话就像老太太的牙齿,有多少是真的?!问:你喜欢我哪一点?答:我喜欢你离我远一点!执子之手,方知子丑,泪流满面,子不走我走。诸葛亮出山前,也没带过兵!凭啥我就要工作经验?INI文件读写文章指数:0 CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。 ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。 一、向ini文件中写入信息的函数 1. 把信息写入系统的win.ini文件 BOOL WriteProfileString( LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串 LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节 LPCTSTR lpString // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键 ) 2. 把信息写入自己定义的.ini文件 BOOL WritePrivateProfileString( LPCTSTR lpAppName, // 同上 LPCTSTR lpKeyName, // 同上 LPCTSTR lpString, // 同上 LPCTSTR lpFileName // 要写入的文件的文件名。若该ini文件与程序在同一个目录下,也可使用相对 //路径,否则需要给出绝度路径。 ) 如: ::WriteProfileString("Test","id","xym"); //在win.ini中创建一个Test节,并在该节中创建一个键id,其值为xym ::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini"); //在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym //若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为: ::WritePrivateProfileString("Test","id","xym",".\\ex1.ini"); 需要注意的是,C系列的语言中,转义字符'\\'表示反斜线'\'。另外,当使用相对路径时,\\前的.号不能丢掉了。 二、从ini文件中读取数据的函数

C语言读写配置文件代码

MFC读写ini配置文件 1.新建头文件如:iniFunc.h,在编辑区域粘贴以下内容: ///////////////////////////////////////////////////////////////////////// // iniFunc.h: interface for the Cini class. #if !defined(AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED _) #define AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include class Cini { public: static DWORD ReadString (char *section, char * key, char stringtoread[], char * filename); static BOOL WriteString(LPCTSTR section, LPCTSTR key,char* stringtoadd, char *filename); Cini(); virtual ~Cini(); }; #endif // !defined(AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_) 2.新建资源文件如:iniFunc.cpp,在编辑区域黏贴以下内容: ///////////////////////////////////////////////////////////////////////// // ini.cpp: implementation of the Cini class. #include "stdafx.h" #include "ini.h" ///////////////////////////////////////////////////////////////////////// //Cini类的构造函数和析构函数 Cini::Cini() { } Cini::~Cini()

操作系统文件管理_答案

第六部分文件管理 1、文件系统的主要目的就是( )。 A、实现对文件的按名存取 B、实现虚拟存储 C、提供外存的读写速度 D、用于存储系统文件 2、文件系统就是指( )。 A、文件的集合 B、文件的目录集合 C、实现文件管理的一组软件 D、文件、管理文件的软件及数据结构的总体 3、文件管理实际上就是管理( )。 A、主存空间 B、辅助存储空间 C、逻辑地址空间 D、物理地址空间 4、下列文件的物理结构中,不利于文件长度动态增长的文件物理结构就是( )。 A、顺序文件 B、链接文件 C、索引文件 D、系统文件 5、下列描述不就是文件系统功能的就是( )。 A、建立文件目录 B、提供一组文件操作 C、实现对磁盘的驱动调度 D、实现从逻辑文件到物理文件间的转换 6、文件系统在创建一个文件时,为它建立一个( )。 A、文件目录 B、目录文件 C、逻辑结构 D、逻辑空间 7、索引式(随机)文件组织的一个主要优点就是( )。 A、不需要链接指针 B、能实现物理块的动态分配 C、回收实现比较简单 D、用户存取方便 8、面向用户的文件组织机构属于( )。 A、虚拟结构 B、实际结构 C、逻辑结构 D、物理结构 9、按文件用途来分,编译程序就是( )。 A、用户文件 B、档案文件 C、系统文件 D、库文件 10、将信息加工形成具有保留价值的文件就是( )。 A、库文件 B、档案文件 C、系统文件 D、临时文件 11、文件目录的主要作用就是( )。 A、按名存取 B、提高速度 C、节省空间 D、提高外存利用率 12、如果文件系统中有两个文件重名,不应采用( )。 A、一级目录结构 B、树型目录结构 C、二级目录结构 D、A与C 13、文件系统采用树型目录结构后,对于不同用户的文件,其文件名( )。 A、应该相同 B、应该不同 C、可以不同,也可以相同 D、受系统约束 14、文件系统采用二级文件目录可以( )。 A、缩短访问存储器的时间 B、实现文件共享 C、节省内存空间 D、解决不同用户间的文件命名冲突

读取配置文件和修改配置文件(ServiceIP.properties)(原创)

读取配置文件和修改配置文件(ServiceIP.properties)(原创) package espeed.util; import java.io.*; import java.util.Properties; /* * 配置短信服务器IP(配置文件建在SRC下,ServiceIP.properties) */ public class EditServiceIP { private static Properties properties=new Properties(); private static EditServiceIP esip; public EditServiceIP(){} public static EditServiceIP getInstance(){ if(esip==null) esip=new EditServiceIP(); return esip; } //取得短信服务器IP public String getSmsServiceIP(){ InputStream

is=EditServiceIP.class.getClassLoader().getResourceAsSt ream("ServiceIP.properties"); try { properties.load(is); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("------------取得短信服务器IP地址发生IO异常"); } String provalue=properties.getProperty("SMS.ServiceIP"); return provalue; } //修改短信服务器IP public String modifySmsServieIP(String smsServiceIP){ File file=new File(EditServiceIP.class.getClassLoader().getResource("S erviceIP.properties").getPath()); try{ properties.load(new FileInputStream(file));

linux下各目录作用和功能

/bin:是binary的缩写,这个目录是对Unix系统习惯的沿袭,存放着使用者最经常使用的命令。如:ls,cp,cat等。 /boot:这里存放的是启动Linux时使用的一些核心文档。 /dev:是device的缩写.这个目录下是任何Linux的外部设备,其功能类似Dos下的.sys 和Win下的.vxd。在Linux中设备和文档是用同种方法访问的。例如:/dev/hda代表第一个物理IDE硬盘。 /etc:这个目录用来存放任何的系统管理所需要的配置文档和子目录。 /home:用户主目录,比如说有个用户叫sina,那他的主目录就是/home/sina,说到这里打个岔.您现在应该明白,在我们访问一些个人网页。如:https://www.360docs.net/doc/8214074607.html,/sina的时候,sina就是表示访问 https://www.360docs.net/doc/8214074607.html, 站点中的用户sina的用户主目录.假如这个网站的操作系统是Linux,那就是表示/home/sina。 /lib:这个目录里存放着系统最基本的动态链接共享库,其作用类似于Windows里的.dll文档。几乎任何的应用程式都需要用到这些共享库。 /lost+found:这个目录平时是空的,当系统不正常关机后,这里就成了一些无家可归的文档的避难所。对了,有点类似于Dos下的.chk文档。 /mnt:这个目录是空的,系统提供这个目录是让用户临时挂载别的文档系统。 /proc:这个目录是个虚拟的目录,他是系统内存的映射,我们能够通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里啊。 /root:系统管理员,也叫终极权限者的用户主目录。当然系统的拥有者,总要有些特权啊。/sbin:s就是Super User的意思,也就是说这里存放的是一些系统管理员使用的系统管理程式。 /tmp:这个目录不用说,一定是用来存放一些临时文档的地方了。 /usr:这是个最庞大的目录,我们要用到的很多应用程式和文档几乎都存放在这个目录了。具体来说: /usr/X11R6:存放X-Windows的目录。 /usr/bin:存放着许多应用程式. /usr/sbin:给终极用户使用的一些管理程式就放在这. /usr/doc:这就是Linux文档的大本营. /usr/include:Linux下研发和编译应用程式需要的头文档在这里找. /usr/lib:存放一些常用的动态链接共享库和静态档案库. /usr/local:这是提供给一般用户的/usr目录,在这安装软件最适合. /usr/man:是帮助文档目录. /usr/src:Linux开放的源代码,就存在这个目录,爱好者们别放过哦! /var:这个目录中存放着那些不断在扩充着的东西,为了保持/usr的相对稳定,那些经常被修改的目录能够放在这个目录下,实际上许多系统管理员都是这样干的.顺便说一下,系统的日志文档就在/var/log目录中. /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库根文件系统 通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要, 经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。 除了可能的一个叫/ v m l i n u z标准的系统引导映像之外,根目录一般不含任何文件。所有其他文件在根文件系统的子目录中。

C#读写配置文件

Windows 应用程序: ///

///发布后就可以读取了 /// private readonly string strFileName = AppDomain.CurrentDomain.BaseDirectory + "Windows_RWConfig.exe.config"; //获得配置文件的全路径 /// ///修改配置文件 /// ///key ///value private void UpdateConfig(string key, string value) { XmlDocument xDoc = new XmlDocument(); xDoc.Load(strFileName); //找出名称为“add”的所有元素 XmlNodeList nodes = xDoc.GetElementsByTagName("add"); for (int i = 0; i < nodes.Count; i++) { //获得元素的key属性 XmlAttribute att = nodes[i].Attributes["key"]; //根据元素的第一个属性来判断元素是不是目标元素 if (att.Value == key) { //对目标元素中的第二个属性赋值 att = nodes[i].Attributes["value"]; att.Value = value; break; } } //保存上面的修改 xDoc.Save(strFileName); } /// ///读取配置文件 /// ///

告诉你C盘里面每个文件夹是什么作用

Documents and Settings是什么文件? 答案: 是系统用户设置文件夹,包括各个用户的文档、收藏夹、上网浏览信息、配置文件等。补:这里面的东西不要随便删除,这保存着所有用户的文档和账户设置,如果删除就会重新启动不能登陆的情况,尤其是里面的default user、all users、administrator和以你当前登陆用户名的文件夹。 Favorites是什么文件? 答案: 是收藏夹,存放你喜欢的网址。可以在其中放网址快捷方式和文件夹快捷方式,可以新建类别(文件夹)。 Program Files是什么文件? 答案: 应用软件文件夹装软件的默认路径一般是这里!当然里面也有些系统自身的一些应用程序Common Files是什么文件? 答案: Common Files. 这个文件夹中包含了应用程序用来共享的文件,很重要,不能乱删除Co mmon Files这个文件是操作系统包扩系统程序和应用程序Common Files是应用程序运行库文件数据库覆盖了大约1000多个最流行的应用程序的插件,补丁等等文件夹com mon files里很多都是系统文件,不能随意删除,除非确定知道是干什么用的,没用的可以删掉。不过就算删掉了有用的东西,也没大的关系,顶多是某些软件用不了,不会造成系统崩溃。 ComPlus Applications是什么文件? 答案: ComPlus Applications:微软COM+ 组件使用的文件夹,删除后可能引起COM+ 组件不能运行 DIFX是什么文件? 答案: 不可以删除,已有的XML数据索引方法从实现思想上可分为两类:结构归纳法和节点定位法.这两种方法都存在一定的问题,结构归纳法的缺点是索引规模较大而且难以有效支持较复杂的查询,而节点定位法的主要缺点是容易形成过多的连接操作.针对这些问题,提出了一种新的动态的XML索引体系DifX,它扩展了已有的动态索引方法,采用一种动态的Bisimil arity的概念,可以根据实际查询需求以及最优化的要求动态决定索引中保存的结构信息,以实现对各种形式的查询最有效的支持.实验结果证明DifX是一种有效而且高效的XML索引方法,其可以获得比已有的XML索引方法更高的查询执行效率. Internet Explorer是什么文件? 答案: 不用说了,肯定不能删除,IE,浏览网页的! Kaspersky Lab是什么文件? 答案:卡巴斯基的文件包,这个是卡巴的报告,在C:\Documents and Settings\All Users\Application Data\Kaspersky Lab\AVP6\Report 的更新文件中有很多repor t文件很占地

配置文件使用说明

(1)报警切除功能 C:\windows\cas2000ops.ini中 [CutAlarm] Enable=0 说明:Enable置0时无报警切除功能,置1时有报警切除功能。默认为0 ( 2 ) 语音报警功能 C:\ windows\ Keyboard.ini中 [Keyboard] SelfSound=1 SoundFileName=ALARM.wav 说明: a)SelfSound项置0时,无语音报警功能,置1时有语音报警功能。默认为0 b)语音文件路径应放在操作员站的Start路径下,SoundFileName用户可以自 定义,默认为ALARM.wav。 (3)在线查询时长 C:\windows\cas2000ops.ini中 [TimeLength] show24hour=1; show60hour=1 说明:show24hour置1时,实时趋势时间段有24小时的时间段,置0时没有show60hour同上。 (4)PID调节幅值更改 操作员安装路径\config\ PID_ADJUST.ini [PID点名] SLOW=0 FAST=0 说明:此调节是按绝对值调节,不是按百分比调节; SLOW与FAST项需为非零值,且FAST值〉SLOW值 默认情况下没有文件PID_ADJUST.ini,需要用户自定义。 (5)点详细窗口风格 C:\windows\cas2000ops.ini中 [TagCurve] Mode=0 说明:Mode置0为浮动窗口风格,置1位对话框。默认为0。 (6)操作员站工程师台菜单项中综合趋势窗口和开关趋势窗口菜单C:\windows\cas2000ops.ini中 [ExtraTrendMenu] Mode=0 说明:Mode置0有综合趋势窗口和开关趋势窗口菜单,置1无。默认为

C#读写config配置文件

C#读写config配置文件 应用程序配置文件(App.config)是标准的XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。 对于一个config文件: 对config配置文件的读写类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Configuration; using System.ServiceModel; using System.ServiceModel.Configuration; namespace NetUtilityLib { public static class ConfigHelper { //依据连接串名字connectionName返回数据连接字符串 public static string GetConnectionStringsConfig(string connectionName) { //指定config文件读取 string file = System.Windows.Forms.Application.ExecutablePath; System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(file); string connectionString = config.ConnectionStrings.ConnectionStrings[connectionName].ConnectionString.ToString(); return connectionString; } ///

///更新连接字符串 /// ///连接字符串名称 ///连接字符串内容 ///数据提供程序名称 public static void UpdateConnectionStringsConfig(string newName, string newConString, string newProviderName) { //指定config文件读取 string file = System.Windows.Forms.Application.ExecutablePath; Configuration config = ConfigurationManager.OpenExeConfiguration(file); bool exist = false; //记录该连接串是否已经存在 //如果要更改的连接串已经存在 if (config.ConnectionStrings.ConnectionStrings[newName] != null) { exist = true; } // 如果连接串已存在,首先删除它 if (exist) { config.ConnectionStrings.ConnectionStrings.Remove(newName); } //新建一个连接字符串实例

文件夹的作用

All Users文件夹: 『Win9x/ME』所有用户文件夹,里面里面包括系统缺省登录时的桌面文件和开始菜单的内容。『Win2000』在Win2000的系统目录中没有这个文件夹,Win2000将用户的信息放在根目录下的Documents and Settings文件夹中,每个用户对应一个目录,包括开始菜单、桌面、收藏夹、我的文档等等。 Application Data文件夹: 『Win9x/ME』应用程序数据任务栏中的快捷方式,输入法的一些文件等等。根据你系统中使用不同的软件,该目录中的内容也有所不同。 『Win2000』在Documents and Settings文件夹中,每个用户都对应一个Application Data 文件夹,同样每个用户由于使用的软件不同,目录内容也相同。 Applog文件夹: 『Win9x/ME』应用程序逻辑文件目录。逻辑文件是用来记录应用软件在运行时,需要调用的文件、使用的地址等信息的文件。要查看这些文件,用记事本打开即可。 Catroot文件夹: 『Win9x』计算机启动测试信息目录,目录中包括的文件大多是关于计算机启动时检测的硬软件信息。 『WinME』该文件夹位于系统目录的system目录中。 『Win2000』该文件夹位于系统目录的system32目录中。 Command文件夹: 『Win9x/ME』DOS命令目录。包括很多DOS下的外部命令,虽说都是些小工具,但真的很好用,特别是对于系统崩溃时。 『Win2000』这些DOS命令位于系统目录的system32目录中。 Config文件夹: 『Win9x/ME/2000』配置文件夹,目录中包括一些MIDI乐器的定义文件。 Cookies文件夹: 『Win9x/ME』Cookies又叫小甜饼,是你在浏览某些网站时,留在你硬盘上的一些资料,包括用户名、用户资料、网址等等。 『Win2000』每个用户都有一个Cookies文件夹,位于Documents and Settings文件夹的每个用户目录中。 Cursors文件夹: 『Win9x/ME/2000』鼠标动画文件夹。目录中包括鼠标在不同状态下的动画文件。 Desktop文件夹: 『Win9x/ME』桌面文件夹。包括桌面上的一些图标。 『Win2000』这个文件夹在系统目录中也存在,同时在Documents and Settings文件夹的每个用户目录中还有“桌面”文件夹。

VC++操作INI配置文件的实现

VC++操作INI配置文件的实现 修改浏览权限| 删除 一.将信息写入.INI文件中. 1.所用的WINAPI函数原型为: BOOL WritePrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName ); 其中各参数的意义: LPCTSTR lpAppName 是INI文件中的一个字段名. LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名. LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的. LPCTSTR lpFileName 是完整的INI文件名. 2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入c:\stud\student.ini 文件中. CString strName,strTemp; int nAge; strName="张三"; nAge=12; WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini"); 此时c:\stud\student.ini文件中的内容如下: [StudentInfo] Name=张三 3.要将学生的年龄保存下来,只需将整型的值变为字符型即可:

strTemp.Format("%d",nAge); WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini"); 二.将信息从INI文件中读入程序中的变量. 1.所用的WINAPI函数原型为: DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName ); 其中各参数的意义: 前二个参数与WritePrivateProfileString中的意义一样. lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量. lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器. nSize : 目的缓存器的大小. lpFileName : 是完整的INI文件名. 2.具体使用方法:现要将上一步中写入的学生的信息读入程序中. CString strStudName; int nStudAge; GetPrivateProfileString("StudentInfo","Name","默认姓名 ",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini"); 执行后strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名". 3.读入整型值要用另一个WINAPI函数:

linux下各文件夹的结构说明及用途详细介绍解析

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令。 /dev:设备特殊文件。 /etc:系统管理和配置文件。 /etc/rc.d:启动的配置文件和脚本。 /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user 表示。 /lib:标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件。 /sbin:系统管理命令,这里存放的是系统管理员使用的管理程序。 /tmp:公用的临时文件存储点。 /root:系统管理员的主目录。 /mnt:系统提供这个目录是让用户临时挂载其他的文件系统。 /lost+found:这个目录平时是空的,系统非正常关机而留下“无家可归”的文件就在这里。 /proc:虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。 /var:某些大文件的溢出区,比方说各种服务的日志文件。 /usr:最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含: /usr/x11r6:存放x window的目录。 /usr/bin:众多的应用程序。

/usr/sbin:超级用户的一些管理程序。 /usr/doc:linux文档。 /usr/include:linux下开发和编译应用程序所需要的头文件。 /usr/lib:常用的动态链接库和软件包的配置文件。 /usr/man:帮助文档。 /usr/src:源代码,linux内核的源代码就放在/usr/src/linux 里。 /usr/local/bin:本地增加的命令。 /usr/local/lib:本地增加的库根文件系统。 通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。除了可能的一个叫/vmlinuz标准的系统引导映像之外,根目录一般不含任何文件。所有其他文件在根文件系统的子目录中。 1. /bin目录 /bin目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后。这些命令都是二进制文件的可执行程序(bin是binary的简称,多是系统中重要的系统文件。 2. /sbin目录 /sbin目录类似/bin,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。 3. /etc目录

配置管理规范文件精选

配置管理规范

配置管理规范模板 目录 1. 目的 2. 适用范围 3. 术语和缩略语 4. 规范内容 5. 引用文件 1. 目的 指导配置管理人员如何建立配置库,并利用配置库管理所有配置项,从而提供配置项的存取和检索功能,有利于配置项的更改控制,保证配置项的完整性和可跟踪性。 2. 适用范围 适用于所有软件产品和软件项目的配置项管理。配置管理可采用各种工具及手工办法,本文件以Source safe配置管理工具为例,规定公司的配置管理办法,使用其他工具时也可对应本文件的要求参照执行。 3. 术语和缩略语 本文件采用NP601100《配置管理》程序使用的术语和缩略语的定义。 4. 规范内容 4.1 配置管理的范围 软件配置可包括以下几方面:项目文档,源代码,执行程序,相关设备及资料等。 1)项目文档主要指:立项建议报告、项目启动计划、可行性分析报告、开发计划、需求分析报告、软件功能规格说明书、系统设计报告、数据库表结构、技术报告、总结报告、验收报告以及上述文档的评审记录。 2)相关设备主要指项目开发和运行环境(包括硬件和软件),以及项目开发和测试过程中使用的专用仪器设备,如读卡机、扫描仪等。 3)相关资料主要指客户提供的行业法规,标准及其调研期间提供的业务单据,往来会议记要,传真,电子邮件,重要的电话记录等。 4.2 各配置项的获得 项目立项之后,软件配置管理负责人SCML即可建立项目配置库,并着手收集各配置项。1)项目文档。开发各阶段结束时,软件配置管理负责人SCML可向开发人员索要相关文档及对应评审记录,归到配置库。 2)开发人员在出差前应带好与客户会谈的准备材料。根据出差的任务不同,还应准备客满意度调查表,交付书,验收报告等。返回之前应和客户确认,并在出差回来时交给软件配置管理负责人SCML一份备份,如有客户提供的文献资料、有关设备仪器须进行登记。对于任何正在进行的项目,如有客户来访须做好会议纪要。 3)开发部门发给客户的传真件或客户发来传真至少应在项目档案中保存一份备份。 4)对于源代码和执行程序的管理最好使用工具,条件不具备时,要注意对配置库的目录分配。各开发人员分别建立自己的工作目录,完成后的模块再放到项目相关目录下。 5)在项目结束归档时电子邮件也应作为项目的相关资料进行归档。 4.3 配置库的建立 所有项目应建立一配置库,以便管理前面提到的各配置项。一般的可视化开发环境都有自带的配置管理工具,可以用管理工具来建立配置库,也可以在机器的某目录下建立配置库,手工管理。下面以Source Safe为例描述配置管理库的建立及各配置项的控制方法。各项目在开始时,均应建立以下几项子项目,进行分阶段管理。

配置文件(ini)的读写

用系统函数读写ini配置文件 一INI文件基础 文件扩展名为ini的文件常用于操作系统、软件等初始化或进行参数设置。ini是initial的缩写。这类文件可以用文本编辑器(如记事本)打开、编辑。 文件格式 节/段sections [section] 参数/键名parameters name=value 注解comments 注解使用分号表示(;)。在分号后面的文字,直到该行结尾都全部为注解。 ;comment text 示例 如QQ安装目录下有一个kernelInfo.ini文件,里面的内容。 [kernel] version=788 packetname=QQPetKernel.EXE ini用途 编写软件的时候需要将一些初始化的信息写入到一个配置文件中,软件启动的时候从这个配置文件中读取这些初始化的信息。软件中的一些过程数据也需要保存到ini文件中。 现在软件大都将这些配置信息写到XML中,因为XML的树形描述层次结构性清晰。这就涉及到XML 的解析,可以自己写解析方法,也可以用第三方库(如TinyXML、CMarkup等)来解析XML。 更多类容可以参考https://www.360docs.net/doc/8214074607.html,/u/5135093875 二应用程序的ini读写 系统提供给了读写ini文件的函数,都是以GetPrivateProfile开头的,常用的有下面3个。作一个简要介绍。 GetPrivateProfileString DWORD GetPrivateProfileString( LPCTSTR lpAppName,//points to section name段名 LPCTSTR lpKeyName,//points to key name键名 LPCTSTR lpDefault,//points to default string默认的键值,这个参数不能为 NULL。如果在ini文件中没有找到lpKeyName,就将赋值lpDefault,给lpReturnedString LPTSTR lpReturnedString,//points to destination buffer指向缓冲区的指针,用于保存键值 DWORD nSize,//size of destination buffer缓冲区的大小 LPCTSTR lpFileName//points to initialization filename ini文件的路径 ); 功能:读取对应段和键的值。 返回值: 返回复制到缓冲区的字符个数,并不包括字符串结尾的NULL。 如果lpAppName和lpKeyName都不为空,并且键值的长度大于了缓冲区的长度,那么就将键值切断,并在末尾添加’\0’字符,返回nSize-1。

让你知道C盘的每个文件夹代表什么,其作用是什么

让你知道C盘的每个文件夹代表什么,其作用是什么 C:\Program Files文件夹介绍 列出常见的几个文件夹: 1、C:\Program Files\common files Common Files (存放软件会用到的公用库文件) 安装一些软件会在里面产生文件夹 比如visual studio symentec antivirus gtk lib 等 他是一些共享资源,这里的共享是指,一个公司所出的一系列软件都需要用这里的文件 比如:vb vc 要用里面visual studio 文件夹下的文件 norton fire wall norton antivirus 等要用里面symentec shared文件夹下的文件acrobat reader photoshop 要用里面adobe 文件夹下的文件 公有文件不能删除 正常的话会有: Microsoft Shared MSSoap ODBC SpeechEngines System Direct X Common Files这个文件是操作系统包扩系统程序和应用程序 Common Files是应用程序运行库文件 数据库覆盖了大约1000多个最流行的应用程序的插件,补丁等等 文件夹common files里很多都是系统文件,不能随意删除,除非确定知道是干什么用的,没用的可以删掉。不过就算删掉了有用的东西,也没大的关系,顶多是某些软件用不了,不会造成系统崩溃。 另外也有说各种软件的注册信息也在里面。 2、C:\Program Files\ComPlus Applications ComPlus Applications:微软COM+ 组件使用的文件夹,删除后可能引起COM+ 组件不能运行 显示名称:COM+ System Application ◎微软描述:管理基于COM+ 组件的配置和跟踪。如果服务停止,大多数基于 COM+ 组件将不能正常工作。如果本服务被禁用,任何明确依赖它的服务都将不能启动。 ◎补充描述:如果 COM+ Event System 是一台车,那么 COM+ System Application 就是司机,如事件检视器内显示的 DCOM 没有启用。一些 COM+软件需要,检查你的C:\Program Files\ComPlus 3、C:\Program Files\InstallShield Installation Information 发现这个网上一些解释的很含糊,说是用来存放部分软件安装信息的文件夹。比较准确的说

c读写配置文件

MSXML2::IXMLDOMDocumentPtr pDoc; MSXML2::IXMLDOMElementPtr xmlRoot ; // 创建DOMDocument对象 HRESUL T hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if ( ! SUCCEEDED(hr)) { MessageBox( " 无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! " ); return ; } // 根节点的名称为Book // 创建元素并添加到文档中 xmlRoot = pDoc -> createElement((_bstr_t) " Book " ); // 设置属性 xmlRoot -> setA ttribute( " id " ,( const char * )m_strId); pDoc -> appendChild(xmlRoot); MSXML2::IXMLDOMElementPtr pNode; // 添加“author”元素 pNode = pDoc -> createElement((_bstr_t) " A uthor " ); pNode -> Puttext((_bstr_t)( const char * )m_strA uthor); xmlRoot -> appendChild(pNode); // 添加“Title”元素 pNode = pDoc -> createElement( " Title " ); pNode -> Puttext(( const char * )m_strTitle); xmlRoot -> appendChild(pNode); // 保存到文件 // 如果不存在就建立,存在就覆盖 pDoc -> save( " d://he.xml " ); ------------------------------------------------------------------------------------------------------------------------------------------------ MSXML2::IXMLDOMDocumentPtr pDoc; HRESUL T hr; hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if (FA ILED(hr)) { MessageBox( " 无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库! " ); return ; } // 加载文件 pDoc -> load( " d://he.xml " ); MSXML2::IXMLDOMNodePtr pNode; // 在树中查找名为Book的节点," // "表示在任意一层查找