优秀的手机游戏下载!
首页 writefile最小写入字节单位

writefile最小写入字节单位

发布时间:2024-09-23 16:18:10 编辑:打包星星 浏览:518

writefile最小写入字节单位方法如下:

1、入文件时,直到所有用于写入的句柄都已关闭,最后一次写入时间不会完全更新。因此,若要确保上次写入时间准确,请在写入文件后立即关闭文件句柄。

2、如果文件的一部分被另一个进程锁定,并且写入操作与锁定部分重叠,则WriteFile将失败。

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)

下面的程序,编译之后,你可以运行很多个实例,目前我将文件写在了D:\\1.txt,每个程序写1000行数据,这些值你可以自己更改(比如 写在C:,每个程序写10000行等),等程序都写完后,你可以去文件中查看写文件的结果。补充一下,我是在VC6.0环境中写的,所以windows.h,如果你不是在这个环境中的话,可能需要修改一些定义,比如DWORD等。其他的API都是windows平台提供的API;

#include &ltstdio.h&gt

#include \”windows.h\”

int main()

{

//获取进程ID,因为你希望是多个进程运行同时写一个文件,所以,我们打印出进程ID

DWORD dwProcessID = GetCurrentProcessId()

//初始化我们要写入文件中的内容,及该内容长度;

char szContent[100] = {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)

writefile最小写入字节单位

if (INVALID_HANDLE_VALUE == hFile)

{

printf(\”[%u]Creat/Open file error!\\r\\n\”,dwProcessID)

return 1

}

//循环写入文件

for(int i = 0i &lt1000 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,&amplen,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最小写入字节单位全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

writefile最小写入字节单位方法如下:1、入文件时,直到所有用于写入的句柄都已关闭,最后一次写入时间不会完全更新。因此,若要确保上次写入时间准确,请在写入…
查看详情
writefile最小写入字节单位方法如下:1、入文件时,直到所有用于写入的句柄都已关闭,最后一次写入时间不会完全更新。因此,若要确保上次写入时间准确,请在写入…
查看详情
writefile最小写入字节单位方法如下:1、入文件时,直到所有用于写入的句柄都已关闭,最后一次写入时间不会完全更新。因此,若要确保上次写入时间准确,请在写入…
查看详情
相关资讯
猜你喜欢