存档

2009年8月 的存档

[解决]易语言多线程出错的问题

2009年8月31日 eking 没有评论

DLL命令:
.版本 2

.DLL命令 SetProcessAffinityMask, 整数型, , , 公开, 设置CPU亲和性 进程句柄 返回CPU号
.参数 hProcess, 整数型
.参数 hProcess, 整数型

.DLL命令 SetThreadAffinityMask, 整数型, , , 公开, 设置CPU亲和性 线程句柄
.参数 hProcess, 整数型
.参数 Mask, 整数型

.DLL命令 GetCurrentProcess, 整数型, , , 公开, 获取当前进程的一个伪句柄 一般是-1

.DLL命令 GetCurrentThread, 整数型, , , 公开, 获取当前线程的一个伪句柄 一般是-2

将以下代码放到易代码开始即可:
SetProcessAffinityMask (-1, 1)

Popularity: 6% [?]

分类: 资料收集 标签:

C#取本机ip地址

2009年8月31日 eking 1 条评论

IPAddress[] hostipspool = Dns.GetHostAddresses(“”);
//使用以下语句则可以循环读取出本机的每一个IP地址信息:

string hostperip;
for (int i = 0; i < hostipspool.Length; i++)
{
hostperip = hostipspool.ToString();
MessageBox.Show(hostperip);
}

Popularity: 5% [?]

分类: 资料收集 标签:

c#文件操作

2009年8月28日 eking 没有评论

若要执行此操作… 请参阅本主题中的示例…
创建文本文件 向文件写入文本
写入文本文件 向文件写入文本
读取文本文件 从文件读取文本
向文件中追加文本 File.AppendText FileInfo.AppendText
重命名或移动文件 File.Move FileInfo.MoveTo
删除文件 File.Delete FileInfo.Delete
复制文件 File.Copy FileInfo.CopyTo
获取文件大小 FileInfo.Length
获取文件属性 File.GetAttributes
设置文件属性 File.SetAttributes
确定文件是否存在 File.Exists
读取二进制文件 对刚创建的数据文件进行读取和写入
写入二进制文件 对刚创建的数据文件进行读取和写入
检索文件扩展名 Path.GetExtension
检索文件的完全限定路径 Path.GetFullPath
检索路径中的文件名和扩展名 Path.GetFileName
更改文件扩展名 Path.ChangeExtension 目录操作
System.IO 类
目录操作
string[] drives = Directory.GetLogicalDrives(); //本地驱动器的名,如:C:\等
string path = Directory.GetCurrentDirectory(); //获取应用程序的当前工作目录
Path.GetFileName(@”c:\dir\file.txt”); //获取子目录的名字,result的结果是file.txt
Directory.GetFiles(路径及文件名) //获取指定目录中的文件名(文件列表)
DirectoryInfo di = new DirectoryInfo(@”f:\MyDir”); //构造函数创建目录
DirectoryInfo di=Directory.CreateDirectory(@”f:\bbs”); //创建对象并创建目录
if (di.Exists == false) //检查是否存在此目录
di.Create(); //创建目录
DirectoryInfo dis = di.CreateSubdirectory(“SubDir”); //以相对路径创建子目录
dis.Delete(true); //删除刚创建的子目录
di.Delete(true); //删除创建目录文件操作
Directory.Delete(@”f:\bbs2″, true); //删除目录及其子目录和内容(如为假不能删除有内容的目录包括子目录)
Directory.GetDirectories 方法 //获取指定目录中子目录的名称
string[] dirs = Directory.GetDirectories(@”f:\”, “b*”);
Console.WriteLine(“此目录中以b开头的子目录共{0}个!”, dirs.Length);
foreach (string dir in dirs) { Console.WriteLine(dir); }
Directory.GetFileSystemEntries //获取指定目录中的目录及文件名
Directory.GetLogicalDrives //检索此计算机上格式为“<驱动器号>:\”的逻辑驱动器的名称,【语法同上】
Directory.GetParent //用于检索父目录的路径。
DirectoryInfo a = Directory.GetParent(path);
Console.WriteLine(a.FullName);Directory.Move //移动目录及其在内的所有文件
Directory.Move(@”f:\bbs\1″, @”f:\bbs\2″); //将文件夹1内的文件剪到文件夹2内 文件夹2是刚创建的
Stream // 对字节的读写操作(包含对异步操作的支持) Reading Writing Seeking
BinaryReader和BinaryWriter // 从字符串或原始数据到各种流之间的读写操作
FileStream类通过Seek()方法进行对文件的随机访问,默认为同步
TextReader和TextWriter //用于gb2312字符的输入和输出
StringReader和StringWriter //在字符串中读写字符
StreamReader和StreamWriter //在流中读写字符
BufferedStream 为诸如网络流的其它流添加缓冲的一种流类型.
MemoryStream 无缓冲的流
NetworkStream 互联网络上的流

通常我们读取一个文件使用如下的步骤:
1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样
FileStream fs = File.OpenRead(filename);
或者
FileStream fs = FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
2、准备一个存放文件内容的字节数组,fs.Length将得到文件的实际大小,就像下面这样
byte[] data = new byte;
3、哇!开始读了,调用一个文件流的一个方法读取数据到data数组中
fs.Read (data, 0, data.Length);
呵呵!我们只写了3句就可以把文件里面的内容原封不动的读出来,真是太简洁了!可以这段代码真的能像你预期的那样工作么?答案是:几乎可以!在大部分情况下上面的代码工作的很好,但是我们应该注意Read方法是有返回值的,既然有返回值那么一定有其道理,如果按照上面的写法完全可以是一个没有返回值的函数。我想返回值的目的是,为了给我们一个机会判断实际读取文件的大小,从而来判断文件是否已经完全读完。所以上面的代码不能保证我们一定读完了文件里面的所有字节(虽然在很多情况下是读完了)。下面的方法提供了一个比上面方法更安全的方法,来保证文件被完全读出
public static void SafeRead (Stream stream, byte[] data){
int offset=0;
int remaining = data.Length;
// 只要有剩余的字节就不停的读
while (remaining > 0){
int read = stream.Read(data, offset, remaining);
if (read <= 0)
throw new EndOfStreamException(“文件读取到”+read.ToString()+”失败!”);
// 减少剩余的字节数
remaining -= read;
// 增加偏移量
offset += read;
}
}

有些情况下你不知道流实际的长度比如:网络流。此时可以使用类似的方法读取流直到流里面的数据完全读取出来为止。我们可以先初始化一段缓存,再将流读出来的流信息写到内存流里面,就像下面这样:
public static byte[] ReadFully (Stream stream){
// 初始化一个32k的缓存
byte[] buffer = new byte[32768];
using (MemoryStream ms = new MemoryStream()){ //返回结果后会自动回收调用该对象的Dispose方法释放内存
// 不停的读取
while (true){
int read = stream.Read (buffer, 0, buffer.Length);
// 直到读取完最后的3M数据就可以返回结果了
if (read <= 0)
return ms.ToArray();
ms.Write (buffer, 0, read);
}
}
}

虽然上面的例子都比较简单,效果也不是很明显(大部分都是对的),也许你早就会了,没关系这篇文章本来就是写给初学者的。
下面的方法提供了一种使用指定缓存长度的方式读取流,虽然在很多情况下你可以直接使用Stream.Length得到流的长度,但是不是所有的流都可以得到。
public static byte[] Read2Buffer (Stream stream, int BufferLen){
// 如果指定的无效长度的缓冲区,则指定一个默认的长度作为缓存大小
if (BufferLen < 1){
BufferLen = 0×8000;
}
// 初始化一个缓存区
byte[] buffer = new byte;
int read=0;
int block;
// 每次从流中读取缓存大小的数据,知道读取完所有的流为止
while ( (block = stream.Read(buffer, read, buffer.Length-read)) > 0){
// 重新设定读取位置
read += block;

// 检查是否到达了缓存的边界,检查是否还有可以读取的信息
if (read == buffer.Length){
// 尝试读取一个字节
int nextByte = stream.ReadByte();

// 读取失败则说明读取完成可以返回结果
if (nextByte==-1){
return buffer;
}

// 调整数组大小准备继续读取
byte[] newBuf = new byte;
Array.Copy(buffer, newBuf, buffer.Length);
newBuf=(byte)nextByte;
buffer = newBuf;// bu
ffer是一个引用(指针),这里意在重新设定buffer指针指向一个更大的内存
read++;
}
}
// 如果缓存太大则使用ret来收缩前面while读取的buffer,然后直接返回
byte[] ret = new byte;
Array.Copy(buffer, ret, read);
return ret;
}

Popularity: 4% [?]

分类: 资料收集 标签:

C# 程序 运行完毕 删除自身

2009年8月11日 eking 没有评论

using (StreamWriter vStreamWriter =new StreamWriter(Application.StartupPath+@”\del.bat”, false, Encoding.Default))
{ vStreamWriter.Write(string.Format(“:del\r\n” + ” del \”{0}\”\r\n” +”if exist \”{0}\” goto del\r\n” + “del %0\r\n”, Application.ExecutablePath));
}
System.Diagnostics.Process.Start(Application.StartupPath + @”\del.bat”);

Popularity: 4% [?]

分类: 资料收集 标签:

ListView 点击列标题 自动排序 【转】

2009年8月8日 eking 没有评论

1.创建一个新的C#项目,窗体Form1会被默认创建。2.向窗体添加一个ListView控件,3.在Form1.cs中添加下面的代码:
private ListViewColumnSorter lvwColumnSorter;
4.将下面的代码粘贴到InitializeComponent()函数中的最后
// 创建一个ListView排序类的对象,并设置listView1的排序器
lvwColumnSorter = new ListViewColumnSorter();
this.listView1.ListViewItemSorter = lvwColumnSorter;

5. 向listView1中添加行,代码略

6.在listView1的ColumnClick事件中添加以下代码:
// 检查点击的列是不是现在的排序列.
if ( e.Column == lvwColumnSorter.SortColumn )
{
// 重新设置此列的排序方法.
if (lvwColumnSorter.Order == SortOrder.Ascending)
{
lvwColumnSorter.Order = SortOrder.Descending;
}
else
{
lvwColumnSorter.Order = SortOrder.Ascending;
}
}
else
{
// 设置排序列,默认为正向排序
lvwColumnSorter.SortColumn = e.Column;
lvwColumnSorter.Order = SortOrder.Ascending;
}

// 用新的排序方法对ListView排序
this.listFiles.Sort();
7.向项目中添加一个类
8.用下面的代码替换全部系统生成的代码
using System.Collections;
using System.Windows.Forms;

///
/// 继承自IComparer
///
public class ListViewColumnSorter : IComparer
{
///
/// 指定按照哪个列排序
///
private int ColumnToSort;
///
/// 指定排序的方式
///
private SortOrder OrderOfSort;
///
/// 声明CaseInsensitiveComparer类对象,

private CaseInsensitiveComparer ObjectCompare;

///
/// 构造函数
///
public ListViewColumnSorter()
{
// 默认按第一列排序
ColumnToSort = 0;

// 排序方式为不排序
OrderOfSort = SortOrder.None;

// 初始化CaseInsensitiveComparer类对象
ObjectCompare = new CaseInsensitiveComparer();
}

///
/// 重写IComparer接口.
///
///
要比较的第一个对象///
要比较的第二个对象/// 比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1
public int Compare(object x, object y)
{
int compareResult;
ListViewItem listviewX, listviewY;

// 将比较对象转换为ListViewItem对象
listviewX = (ListViewItem)x;
listviewY = (ListViewItem)y;

// 比较
compareResult = ObjectCompare.Compare(listviewX.SubItems.Text,listviewY.SubItems.Text);

// 根据上面的比较结果返回正确的比较结果
if (OrderOfSort == SortOrder.Ascending)
{
// 因为是正序排序,所以直接返回结果
return compareResult;
}
else if (OrderOfSort == SortOrder.Descending)
{
// 如果是反序排序,所以要取负值再返回
return (-compareResult);
}
else
{
// 如果相等返回0
return 0;
}
}

///
/// 获取或设置按照哪一列排序.
///
public int SortColumn
{
set
{
ColumnToSort = value;
}
get
{
return ColumnToSort;
}
}

///
/// 获取或设置排序方式.
///
public SortOrder Order
{
set
{
OrderOfSort = value;
}
get
{
return OrderOfSort;
}
}

}
9.保存、编译并执行程序
10.点击列头测试

From MicroSoft.com:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;319401

Popularity: 5% [?]

分类: 资料收集 标签:

网络推手“造”热贴一条200元

2009年8月7日 eking 1 条评论


  “贾君鹏,你妈妈喊你回家吃饭。”近日,一个12字的帖子莫名蹿红,短短两天回复数达到300621,点击数7607617。随后,北京一传媒公司自曝是他们制造了“贾君鹏”,目的是帮助一款游戏保持关注度和人气,这个创意让他们赚了“6位数”。
  近日,一位中山的“推手”告诉记者,他也参与了“贾君鹏事件”。他说,身处四面八方的普通“推手”们,也许素未谋面,每天通过各种论坛、QQ等即时通讯工具等待着愿意出钱的“上家”,只等上家“出题”,大家便开始“顶”。他们并不知道“上家”是谁,只知道月底自己的银行账号会收到“上家”打进来的钱。自感“商机无限”的他,也踌躇满志地要“创业”。
  “贾君鹏事件,我花了两天时间间隔顶帖,只赚了100元。”作为一个已经有两年经验的兼职网络推手,阿前(化名)对近期“贾君鹏”事件的火红程度也是始料不及。在多次感受到“无限商机”后,阿前正计划辞掉工作并组建一支专业的网络推手团队。
  在中山,像阿前这样计划全职做网络推手的人不在少数,当中就包括不少一直在从事网络营销的策划公司。在记者的调查暗访下,网络江湖的炒作利益链条浮出水面。
  由资深网民到网络推手
阅读全文…

Popularity: 3% [?]

分类: 资料收集 标签: