在c#中,writefile.Close | 用来做什么

在c#中,writefile.Close |  用来做什么

本文目录

  • 在c#中,writefile.Close() 用来做什么
  • writefile这个API函数作用是什么,举例子说明
  • writefile的使用
  • WriteFile函数怎么向USB设备写文件
  • WriteFile怎么实现异步写入
  • WriteFile()用法
  • writefile 多线程写多文件 该如何做
  • WriteFile第四个参数如何理解
  • 如何让WriteFile立即生效
  • 如何使用WriteFile将数据写到文件末尾

在c#中,writefile.Close() 用来做什么


writefile一般读写文件的操作的类的实例化的名称会这样儿声明。
而.close是这个类的成员函数,读写文件,要先打开文件再进行操作,所以操作完必须要调用close来关闭这个文件。

writefile这个API函数作用是什么,举例子说明


写入文件数据用的,调用前需要先用createfile打开或者创建文件,
HANDLE hfile = CreateFile(.....);
char* filebuff = new char;
DWORD writesize = 0;
int ret = WriteFile( hfile, filebuff, 100, &writesize, NULL );
CloseHandle( hfile );
delete filebuff;

writefile的使用


#include “windows.h“
#include “iostream“
int main()
{
HANDLE fileHandle;
fileHandle=CreateFile(“d:\\Hello.txt“, GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
//如果使用OPEN_EXISTING则不会创建文件
if(fileHandle == INVALID_HANDLE_VALUE)
return 1;
char *data=“http://www.baidu.com/“;
DWORD a = 25;
unsigned long b;
OVERLAPPED c;
WriteFile(fileHandle, data, a, &b, NULL);
return 0;
}
参考资料:解读VC++编程中的文件操作API和CFile类

WriteFile函数怎么向USB设备写文件


发送数据给USB时,需要注意,不能超出HID设备枚举时所报告的数据包最大长度。另外就是同步方式还是异步方式。以下是我以前的工程代码片段,供参考:《pre t=“code“ l=“cpp“》bool CUSBBase::USBSendData(unsigned char *pWriteBuffer,unsigned int uSize,OVERLAPPED *pOverLapped)
{
if (m_hDeviceWrite==INVALID_HANDLE_VALUE)
{
return false;
}
DWORD size_write_in=0,dwError=0;
BOOL ret=WriteFile(m_hDeviceWrite,pWriteBuffer,uSize,size_write_in,pOverLapped);
if (ret==FALSE)
{
dwError=GetLastError();
if (dwError==ERROR_IO_PENDING||dwError==ERROR_SUCCESS)
{
return true;
}
return false;
}
return true;
}

WriteFile怎么实现异步写入


fs.writeFile的方法使用说明: 以异步的方式将data写入文件,文件已存在的情况下,原内容将被替换
语法: 复制代码代码如下: fs.writeFile(filename, data, [options], [callback(err)]) 由于该方法属于fs模块,使用前需要引入fs模块(var fs=。

WriteFile()用法


hUSBWrite,你是不是要写端口?写端口东西读出来不一样就比较正常了。
USB的端口许多情况下是一次写一堆固定长度数据的,可能64就是那个固定长度。

writefile 多线程写多文件 该如何做


下面的程序,编译之后,你可以运行很多个实例,目前我将文件写在了D:\1.txt,每个程序写1000行数据,这些值你可以自己更改(比如 写在C:,每个程序写10000行等),等程序都写完后,你可以去文件中查看写文件的结果。补充一下,我是在VC6.0环境中写的,所以windows.h,如果你不是在这个环境中的话,可能需要修改一些定义,比如DWORD等。其他的API都是windows平台提供的API;
#include 《stdio.h》
#include “windows.h“
int main()
{
//获取进程ID,因为你希望是多个进程运行同时写一个文件,所以,我们打印出进程ID
DWORD dwProcessID = GetCurrentProcessId();
//初始化我们要写入文件中的内容,及该内容长度;
char szContent = {0};
sprintf(szContent,“process[%u] write file\r\n“,dwProcessID);
DWORD dwContentLen = strlen(szContent);
//创建互斥量,这样可以进行进程间的互斥,当然用这个也可以做线程间的互斥
HANDLE hMutex = CreateMutex(NULL,FALSE,“MyFileMutex“);
if (NULL == hMutex)
{
printf(“[%u]Create/Open Mutex error!\r\n“,dwProcessID);
return 1;
}
//创建或打开文件
HANDLE hFile = CreateFile(“D:\\1.txt“,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ,NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_ARCHIVE,
NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
printf(“[%u]Creat/Open file error!\r\n“,dwProcessID);
return 1;
}
//循环写入文件
for(int i = 0; i 《 1000 ; i++)
{
//等待临界资源,即锁定文件
WaitForSingleObject(hMutex,INFINITE);
printf(“Process[%u] Get the signal\r\n“,dwProcessID);
DWORD len = 0;
//因为是共享写文件,即多个程序写一个文件,所以一定要将文件指针偏移到尾部
SetFilePointer(hFile,0,NULL,FILE_END);
//写入文件
BOOL rnt = WriteFile(hFile,szContent,dwContentLen,&len,NULL);
if (rnt == FALSE)
{
printf(“Process[%u] Fail to write file\r\n“,dwProcessID);
}
//释放互斥量,解除锁定
ReleaseMutex(hMutex);
//加个Sleep便于我们中间观察结果
Sleep(30);
}
CloseHandle(hMutex);
CloseHandle(hFile);
return 0;
}
应你要求,我把AIP中的宏定义解释如下:
HANDLE hFile = CreateFile(“D:\\1.txt“,
GENERIC_READ | GENERIC_WRITE,//表示程序对该文件有读和写的权限
FILE_SHARE_WRITE | FILE_SHARE_READ,//表示可以多个程序共享读和写的权限
NULL,
OPEN_ALWAYS,//表示打开该文件,如果该文件不存在,则创建该文件
FILE_ATTRIBUTE_ARCHIVE,//文件的属性为存档
NULL);
WaitForSingleObject(hMutex,INFINITE);
//INFINITE表示永远等待,直到hMutex有信号为止
SetFilePointer(hFile,0,NULL,FILE_END);
//FILE_END表示从文件尾部开始偏移;实际此举就是将文件指针偏移到文件尾部;

WriteFile第四个参数如何理解


&x是取数据x的地址符, x&&y是x且y的意思。
在参数里面,一种是参数需要指针,比如fun(int *p)你可以定义int p,按后fun(&p),还有一种比如fun(int &i)意思大体上是函数会取一个值返回给参数i。
关于WriteFile其声明如下
BOOL WriteFile( HANDLE hFile, // 文件句柄
LPCVOID lpBuffer, // 数据缓存区指针
DWORD nNumberOfBytesToWrite, // 你要写的字节数
LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针 LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针 );
在你那里面,&nBytes就是取nBytes的地址,指针就是地址。

如何让WriteFile立即生效


WriteFile函数通常是将数据写入到内部缓冲区,然后OS会定期将缓冲区中的数据写入到磁盘。如果想在调用WriteFile之后,数据就立即写入磁盘,有如下三种方法:
1. 调用FlushFileBuffers(hFile);
Flushes the buffers of a specified file and causes all buffered data to be written to a file.
BOOL FlushFileBuffers(
HANDLE hFile // open handle to file whose buffers are to be flushed
);
该函数会将指定文件的缓存数据写入磁盘。
2. 在用CreateFile创建文件的时候,第6个参数使用标志
FILE_FLAG_WRITE_THROUGH
Instructs
the operating system to write through any intermediate cache and go
directly to disk. The operating system can still cache write operations,
but cannot lazily flush them.
3. 关闭掉句柄
CloseHandle(hFile);

如何使用WriteFile将数据写到文件末尾


方法1:用append模式打开文件,然后写入数据
方法2:用读写模式打开,使文件指针移动到文件末尾,然后写入数据
方法3:用读模式打开文件,用写和建立模式打开新文件,读取原文件内容,写入新文件,再将新文件中追加写入新的数据,将原文件改名为备份文件名,将新文件改名为原文件名

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部