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 { /** * 以字节为单位读取文件,常用 ...
随机推荐
- nodejs中引入art-template模板
使用Webstorm创建nodejs express应用时,默认使用的是jade或者ejs模板,对于不习惯这两种模板语法的人来说确实不是很方便.没关系,这里我们使用art-template模板引擎,使 ...
- logback.xml简单配置
感觉配置的没问题,但是控制台就是不输出日志,后来发现是jar的问题. 依赖包: 注意依赖包,没有其他,只有下面3个,因为Jar包的问题,浪费了很长时间 <dependency> <g ...
- Object.preventExtensions()使用技巧
Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性. // Object.preventExtensions将原对象变的不可扩展,并且返回原 ...
- Web前端面试指导(十五):CSS样式-display有哪些作用?
题目点评 其实就是要你说清楚该属性有哪些值,每个值都有什么作用,这个题目可以答得很简单,但要答全也并非是一件容易的事情. 元素默认的display值的情况如下(这个一般很少人注意这一点) block( ...
- C++基础--回调的应用
一.类成员函数的回调 1. 类成员函数的回调,函数的调用必须通过类来调用: CallBack.h #pragma once class CallBack { public: CallBack(); ~ ...
- 02_dubbo实例_多版本号
[多版本作用] 当一个接口实现,出现不兼容升级时,可以用版本号过渡. 版本号不同的服务之间不能引用. [版本迁移方式] 1.在低压时间段,先升级一半Provider为新版本. 2.再将所有消费者升级为 ...
- Java——实现对密码进行MD5加密
package common; /** *@author作者 E-Mail: *@version 创建时间:2015-9-24+下午01:22:44 *类说明 **/ import java.secu ...
- Android 触发Button按钮事件的三种方式
1.新创建一个类 2.使用内部类 3.当多个button按钮时,为简化代码而创建的实例listener 贴代码: MainActivity.Java 文件: package com.android. ...
- HBuilder自定义格式化代码
对于代码格式到底为两个空格还是四个空格,可能大家喜欢的都不同,如果你是在使用HBuilder编辑器,那么恭喜你,这两种代码格式你可以轻易的更换.下面贴步骤 1.打开工具—>选项 2.选择HBui ...
- recvfrom WSAEFAULT 10014 的错误记录
在使用 recvfrom 时一直没报错, 像这样 recvfrom(sock, Data, , (sockaddr*)&server_addr, &send_size) 当我看见百度百 ...