C#通过指针读取文件
// readfile.cs
// 编译时使用:/unsafe
// 参数:readfile.txt // C#通过指针读取文件。使用该程序读并显示文本文件。
using System;
using System.Runtime.InteropServices;
using System.Text; class FileReader
{
const uint GENERIC_READ = 0x80000000;
const uint OPEN_EXISTING = ;
IntPtr handle; [DllImport("kernel32", SetLastError=true)]
static extern unsafe IntPtr CreateFile(
string FileName, // 文件名
uint DesiredAccess, // 访问模式
uint ShareMode, // 共享模式
uint SecurityAttributes, // 安全属性
uint CreationDisposition, // 如何创建
uint FlagsAndAttributes, // 文件属性
int hTemplateFile // 模板文件的句柄
); [DllImport("kernel32", SetLastError=true)]
static extern unsafe bool ReadFile(
IntPtr hFile, // 文件句柄
void* pBuffer, // 数据缓冲区
int NumberOfBytesToRead, // 要读取的字节数
int* pNumberOfBytesRead, // 已读取的字节数
int Overlapped // 重叠缓冲区
); [DllImport("kernel32", SetLastError=true)]
static extern unsafe bool CloseHandle(
IntPtr hObject // 对象句柄
); public bool Open(string FileName)
{
// 打开现有文件进行读取
handle = CreateFile(
FileName,
GENERIC_READ,
,
,
OPEN_EXISTING,
,
); if (handle != IntPtr.Zero)
return true;
else
return false;
} public unsafe int Read(byte[] buffer, int index, int count)
{
int n = ;
fixed (byte* p = buffer)
{
if (!ReadFile(handle, p + index, count, &n, ))
return ;
}
return n;
} public bool Close()
{
// 关闭文件句柄
return CloseHandle(handle);
}
}
////////////////////////////////////////////////////////////////////下面是测试代码///////////////////////////////////////////////////////////////////////////////
class Test
{
public static int Main(string[] args)
{
if (args.Length != )
{
Console.WriteLine("Usage : ReadFile <FileName>");
return ;
} if (!System.IO.File.Exists(args[]))
{
Console.WriteLine("File " + args[] + " not found.");
return ;
} byte[] buffer = new byte[];
FileReader fr = new FileReader(); if (fr.Open(args[]))
{ // 假定正在读取 ASCII 文件
ASCIIEncoding Encoding = new ASCIIEncoding(); int bytesRead;
do
{
bytesRead = fr.Read(buffer, , buffer.Length);
string content = Encoding.GetString(buffer, , bytesRead);
Console.Write("{0}", content);
}
while (bytesRead > ); fr.Close();
return ;
}
else
{
Console.WriteLine("Failed to open requested file");
return ;
}
}
}
参考链接:
C#通过指针读取文件
C# 指针之美
C#下的指针运用
C#通过指针读取文件的更多相关文章
- Java读取文件的时候,如何让指针重新回到文件的开头
今天在测试IO流的使用的时候发现在reader读取文件之后,再向文件添加内容,再继续读文件,打印出的结果只能读取追加的文件. 如何才能重新读取呢?试了mark和reset,似乎会报异常.记在这以后看是 ...
- php函数fgets读取文件
如果一个文件比较大,可以考虑用fgets函数 下面是个例子: #文件作用:fgets读取文件 $start_time = microtime(true); $file_name = "a.t ...
- Java读取文件的几种方式
package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...
- LoadRunner 脚本学习 -- 读取文件内容
随便创建个txt文档 输入点内容,例如 读取文件内前N个字符: Action() { long myfile; ; ]; char *filename = "E:\\kkk.txt&quo ...
- 如何有效的使用C#读取文件
如何有效的使用C#读取文件 你平时是怎么读取文件的?使用流读取.是的没错,C#给我们提供了非常强大的类库(又一次吹捧了.NET一番),里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件 ...
- C语言 读取文件中特定数据
//读取文件数据 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct jia ...
- Linux C 单链表 读取文件 并排序 实例并解释
C的指针挺头疼的,先看一个例子: 给指针赋值和通过指针进行赋值这两种操作的差别确实让人费解.谨记区分的重要方法是:如果对左操作数进行解引用,则修改的是指针所指对象的值: 如果没有使用解引用操作, ...
- LinuxC语言读取文件,分割字符串,存入链表,放入另一个文件
//file_op.c #include <string.h> #include <stdio.h> #include <stdlib.h> struct info ...
- java读取文件多种方法
1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用 ...
随机推荐
- Spring.Net IOC基本应用和在MVC4中的应用
1.Spring.Net的IOC简单应用 新建一个解决方案添加一个控制台应用程序和一个业务层一个业务层的接口层,通过配置,让控制台应用程序调业务层的方法 1)新建如下图所示,BLL为业务层,通过Spr ...
- spring 代理
java动态代理实现 1. Java自带的动态代理,反射生成字节码 2. Cglib调用asm生成子类 spring 中代理实现 1. 如果类实现了接口,使用java动态代理 2. 没有实现接口,使用 ...
- pycharm下 os.system os.popen执行命令返回有中文乱码
原文 settings:
- MySQL root 密码修改
小伙伴要在以前的服务器上装个代码版本控制的软件,要用到数据库,可是想来找去root密码还是忘了,其他已经安装的服务都是用的专用账户配置文件里要找不到root用户的密码.用以下方法将密码强制修改掉: 1 ...
- ImportError: No module named bs4错误解决方法
前言:毕业论文打算用Python做爬虫爬一些数据,最近开始入门Python: 在学习的时候遇到一个问题,按照看的文章安装了Python,也配置了相应的环境(使用window系统),使用pycharm编 ...
- 排序算法lowb三人组-选择排序
def get_min_pos(li): min_pos = 0 for i in range(1, len(li)): if li[i] < li[min_pos]: min_pos = i ...
- 排序算法lowb三人组-冒泡排序
冒泡排序:顾名思义就是像气泡从水里浮出来一样 把列表立起来如上图所示,从列表的第0项开始循环(把最大的数想成此次循环的气泡) 要把最大的放到上面那那就用第0项开始一次和剩下的开始比较,只要比第0项小就 ...
- JS判断请求来自Android手机还是iPhone手机
<script type="text/javascript"> var browser = { versions: function () { var u = navi ...
- 纯css面板插件,自适应,多样式
最近在做公司的系统后台,用的bootstrap,在设计布局的时候不喜欢他的面板,所以自己写了这个面板插件,分享给大家 先上预览图: 默认样式: 绿色: 黄色: 蓝: 红: 使用方法: 引用MoUi.c ...
- CSS 3篇(持续更新)
1.关于盒子模型 css盒子模型 又称框模型 (Box Model) ,包含了元素内容(content).内边距(padding).边框(border).外边距(margin)几个要素.如图: 理解c ...