icfans

FS 主要接口函数的使用 :FS_Commit,FS_Seek,FS_Delete

0
阅读(559) 评论(0)

[DESCRIPTION]
FS 主要接口函数的使用:FS_Commit,FS_Seek,FS_Delete
[SOLUTION]
int FS_Commit(FS_HANDLEFileHandle)
该函数用来将缓冲区中还没有写入到文件中的数据写入进文件中去,一般在FS_Write写完文件后用此函数来确保数据都被
写进去
2. int FS_Seek(FS_HANDLE FileHandle,int Offset, int Whence)
该函数用来将文件指针指向某个位置, Whence的取值有FS_FILE_BEGIN、 FS_FILE_CURRENT和
FS_FILE_END。
比如可用如下方法将文件指向末尾部分,
FS_Seek( h, 0,FS_FILE_END);
然后可在文件末尾追加写入数据。
Offset为文件指针的偏移,例如:
FS_Seek(h,-5,FS_FILE_CURRENT)将文件指针向前移5个字节,如果是向后移5个字节的话则offset值为5
3. int FS_Delete(const WCHAR *FileName)
该函数用来删除一个文件。
下面,用一个实例将以上几个函数联系起来使用。
实例具体为:将一个文件中的内容(假定不多于5000个字节)全部读出来然后再追加到它自己的末尾,即将文件的内容
copy一遍到它本身,icfans如下:
FS_HANDLE h;
UINT read, written, size;
static S8 buf[5000];
S8 UnicodeName[100];
memset(buf, 0, sizeof(buf));
AnsiiToUnicodeString((S8 *) UnicodeName,(S8 *)”
D:\\example\\test.c”);
if (( h = (FS_HANDLE)FS_Open((constWCHAR *) UnicodeName,
FS_READ_WRITE|FS_OPEN_SHARED|FS_CREATE)) >= 0)
{
FS_GetFileSize(h,&size);
if(size> 0)
{
FS_Read(h, (void *)buf, size, &read);
}
FS_Seek(h, 0, FS_FILE_END);
FS_Write(h, (void*)buf,size, &written);
FS_Commit(h);
FS_Close(h);
}
注:这里的FS_Read(FS_Write)在操作的时候一般会将指定大小的数据读(写)出来,但这并不能保证一定做的到

所以,比较合理的做法是读写完后判断size和read(written)的大小,如果read(written)小于size
,则要将剩下的内容再继续读写。
另外,由于系统分配给函数执行的栈空间不是足够大,所以,如果这里的buf比较大的话要声明成static,不然会栈
越界的,而静态
(static)型则不占用栈空间