初始化filestream时,参数句柄怎么获得? 初始化filestream时,参数句柄怎么获得?最好能提供一个例子,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 using System;using System.IO;using System.Runtime.InteropServices;namespace copytest{ /// <summary> /// FileAccess 的摘要说明。 /// </summary> public class OpenFileApi { private const uint GENERIC_READ = 0x80000000; private const uint GENERIC_WRITE = 0x40000000; private const int CREATE_NEW = 1; private const int CREATE_ALWAYS = 2; private const int OPEN_EXISTING = 3; private const int OPEN_ALWAYS = 4; private const int FILE_SHARE_READ = 0x1; private const int FILE_SHARE_WRITE = 0x2; private const uint FILE_ATTRIBUTE_READONLY = 0x1; private const uint FILE_ATTRIBUTE_HIDDEN = 0x2; private const uint FILE_ATTRIBUTE_SYSTEM = 0x4; private const uint FILE_ATTRIBUTE_DIRECTORY = 0x10; private const uint FILE_ATTRIBUTE_ARCHIVE = 0x20; private const uint FILE_ATTRIBUTE_NORMAL = 0x80; private const uint FILE_ATTRIBUTE_TEMPORARY = 0x100; private const uint FILE_ATTRIBUTE_COMPRESSED = 0x800; private const uint FILE_FLAG_NO_BUFFERING = 0x20000000; private const uint FILE_FLAG_WRITE_THROUGH = 0x80000000; private const int INVALID_HANDLE_VALUE = -1; private int filehandle; //声明API的语句。(关键!) [DllImport("kernel32.dll")] private static extern int CreateFile ( string lpFileName, //File name uint dwDesiredAccess, //Access mode int dwShareMode, //Share mode int lpSecurityAttributes, //SD int dwCreationDisposition, //How to create uint dwFlagsAndAttributes, //File attributes int hTemplateFile //Handle to template file ); [DllImport("kernel32.dll")] private static extern bool CloseHandle ( int hObject //Handle to object ); public OpenFileApi() { filehandle=INVALID_HANDLE_VALUE; nobuffermode=false; } ~OpenFileApi() { Close(); } public FileStream Open(String filepath,FileMode mode, FileAccess access,FileShare share) { uint dwDesiredAccess; //Access mode int dwShareMode; //Share mode int lpSecurityAttributes; //SD int dwCreationDisposition; //How to create uint dwFlagsAndAttributes; //File attributes if (filehandle != INVALID_HANDLE_VALUE) { CloseHandle(filehandle); } switch (access) { case FileAccess.Read: dwDesiredAccess=GENERIC_READ; break; case FileAccess.Write: dwDesiredAccess=GENERIC_WRITE; break; default: dwDesiredAccess=GENERIC_READ | GENERIC_WRITE; break; } switch (share) { case FileShare.Read: dwShareMode=FILE_SHARE_READ; break; case FileShare.Write: dwShareMode=FILE_SHARE_WRITE; break; case FileShare.ReadWrite: dwShareMode=FILE_SHARE_READ | FILE_SHARE_WRITE; break; default: dwShareMode=0; break; } switch (mode) { case FileMode.Open: dwCreationDisposition=OPEN_EXISTING; break; case FileMode.OpenOrCreate: dwCreationDisposition=OPEN_ALWAYS; break; case FileMode.CreateNew: dwCreationDisposition=CREATE_NEW; break; default: dwCreationDisposition=CREATE_ALWAYS; break; } lpSecurityAttributes=0; dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL; filehandle=CreateFile(filepath, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, 0); if (filehandle != INVALID_HANDLE_VALUE) { FileStream newfs = new FileStream((IntPtr)filehandle,access); return(newfs); } else { throw new Exception("File cannot open."); //return(null); } } public void Close() { if (filehandle!=INVALID_HANDLE_VALUE) { CloseHandle(filehandle); filehandle=INVALID_HANDLE_VALUE; } } }} 不可能得到一个尚未创建的文件流的句柄的1.先创建文件获取句柄 handleValue = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);2.通过文件创建文件流fileStream = new FileStream(fileName, FileMode.Create); C# 中怎么通过代码画出立方体? 问下关于C#动态加载控件的方法 急求!C#打印预览死机怎么回事? 怎么我的取系统时间不对的捏? 访问数据库的时候一直提示没有访问权限或数据库已被独占方式打开 .NET CF 如何使用帮助系统 页面锁定问题:服务端需要执行程序,该程序处理需要时间,如何控制不让用户操作? 如何将string转化为一个控件名称,并可以对该控件赋值. 求教两个关于GDI+的高级问题 虚心请教高手! 关于Remoting连接的问题 Winform 程序中能否使用Castle框架?怎么初始化
using System.IO;
using System.Runtime.InteropServices;namespace copytest
{
/// <summary>
/// FileAccess 的摘要说明。
/// </summary>
public class OpenFileApi
{ private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000; private const int CREATE_NEW = 1;
private const int CREATE_ALWAYS = 2;
private const int OPEN_EXISTING = 3;
private const int OPEN_ALWAYS = 4; private const int FILE_SHARE_READ = 0x1;
private const int FILE_SHARE_WRITE = 0x2; private const uint FILE_ATTRIBUTE_READONLY = 0x1;
private const uint FILE_ATTRIBUTE_HIDDEN = 0x2;
private const uint FILE_ATTRIBUTE_SYSTEM = 0x4;
private const uint FILE_ATTRIBUTE_DIRECTORY = 0x10;
private const uint FILE_ATTRIBUTE_ARCHIVE = 0x20;
private const uint FILE_ATTRIBUTE_NORMAL = 0x80;
private const uint FILE_ATTRIBUTE_TEMPORARY = 0x100;
private const uint FILE_ATTRIBUTE_COMPRESSED = 0x800;
private const uint FILE_FLAG_NO_BUFFERING = 0x20000000;
private const uint FILE_FLAG_WRITE_THROUGH = 0x80000000; private const int INVALID_HANDLE_VALUE = -1; private int filehandle; //声明API的语句。(关键!)
[DllImport("kernel32.dll")]
private static extern int CreateFile
(
string lpFileName, //File name
uint dwDesiredAccess, //Access mode
int dwShareMode, //Share mode
int lpSecurityAttributes, //SD
int dwCreationDisposition, //How to create
uint dwFlagsAndAttributes, //File attributes
int hTemplateFile //Handle to template file
); [DllImport("kernel32.dll")]
private static extern bool CloseHandle
(
int hObject //Handle to object
);
public OpenFileApi()
{
filehandle=INVALID_HANDLE_VALUE;
nobuffermode=false;
} ~OpenFileApi()
{
Close();
} public FileStream Open(String filepath,FileMode mode, FileAccess access,FileShare share)
{
uint dwDesiredAccess; //Access mode
int dwShareMode; //Share mode
int lpSecurityAttributes; //SD
int dwCreationDisposition; //How to create
uint dwFlagsAndAttributes; //File attributes if (filehandle != INVALID_HANDLE_VALUE)
{
CloseHandle(filehandle);
} switch (access)
{
case FileAccess.Read:
dwDesiredAccess=GENERIC_READ;
break;
case FileAccess.Write:
dwDesiredAccess=GENERIC_WRITE;
break;
default:
dwDesiredAccess=GENERIC_READ | GENERIC_WRITE;
break;
} switch (share)
{
case FileShare.Read:
dwShareMode=FILE_SHARE_READ;
break;
case FileShare.Write:
dwShareMode=FILE_SHARE_WRITE;
break;
case FileShare.ReadWrite:
dwShareMode=FILE_SHARE_READ | FILE_SHARE_WRITE;
break;
default:
dwShareMode=0;
break;
} switch (mode)
{
case FileMode.Open:
dwCreationDisposition=OPEN_EXISTING;
break;
case FileMode.OpenOrCreate:
dwCreationDisposition=OPEN_ALWAYS;
break;
case FileMode.CreateNew:
dwCreationDisposition=CREATE_NEW;
break;
default:
dwCreationDisposition=CREATE_ALWAYS;
break;
} lpSecurityAttributes=0;
dwFlagsAndAttributes=FILE_ATTRIBUTE_NORMAL; filehandle=CreateFile(filepath,
dwDesiredAccess,
dwShareMode,
lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
0); if (filehandle != INVALID_HANDLE_VALUE)
{
FileStream newfs = new FileStream((IntPtr)filehandle,access);
return(newfs);
}
else
{
throw new Exception("File cannot open.");
//return(null);
}
} public void Close()
{
if (filehandle!=INVALID_HANDLE_VALUE)
{
CloseHandle(filehandle);
filehandle=INVALID_HANDLE_VALUE;
}
}
}
}
1.先创建文件获取句柄
handleValue = CreateFile(Path, GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero);
2.通过文件创建文件流
fileStream = new FileStream(fileName, FileMode.Create);