关于API函数写入文件,有没有类似于append的功能的?

menuvb 2007-03-30 06:27:39
说起来也很让人郁闷。好不容易折腾一下,发现API函数中没有一个类似于Append的功能。
FileStream vFileStream = File.Open(@"C:\Documents and Settings\Administrator\桌面\a.txt", FileMode.Open);
vFileStream.Seek(0, SeekOrigin.Begin);
SECURITY_ATTRIBUTES _SECURITY_ATTRIBUTES=new SECURITY_ATTRIBUTES();
OVERLAPPED _OVERLAPPED=new OVERLAPPED();
// OFSTRUCT _offstruct=new OFSTRUCT();
IntPtr vDesHelder = Kernel.CreateFile(@"c:\a.txt", Kernel.GENERIC_WRITE | Kernel.GENERIC_READ, 0, ref _SECURITY_ATTRIBUTES, Kernel.OPEN_ALWAYS, 0, IntPtr.Zero);
//IntPtr vDesHelder = Kernel.OpenFile(@"c:\a.txt", ref _offstruct, Kernel.OF_READWRITE);
byte[] buffer=new byte[4029];
int reader = 0;
int lBytesWritten = 0;
int lpDistanceToMoveHigh = 0;
while ((reader = vFileStream.Read(buffer,0, buffer.Length)) > 0)
{
// Console.WriteLine(Kernel.SetFilePointer(vDesHelder, writePosition, ref writePosition, 0));
int isuccess = Kernel.WriteFile(vDesHelder, buffer, reader, ref lBytesWritten, ref _OVERLAPPED);
}
Kernel.FlushFileBuffers(vDesHelder);
Kernel.CloseHandle(vDesHelder);
vFileStream.Close();
}

让人郁闷的就是WriteFile这个函数,一直没弄明白nNumberOfBytesToWrite字段的意思。另外我设置了读写位置,还是没有效果。每次都会覆盖前面写入的内容。不知道还没有另外的函数?有了解的朋友希望帮助一下。谢谢!
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2007-03-30
  • 打赏
  • 举报
回复
奇怪,如果你是实现把一个文件追加到另一个文件中直接用.NET的方法就可以了
没有必要使用API,如果是研究的话另说
王集鹄 2007-03-30
  • 打赏
  • 举报
回复
BOOL ReadFile(

HANDLE hFile, // handle of file to read
LPVOID lpBuffer, // address of buffer that receives data
DWORD nNumberOfBytesToRead, // number of bytes to read
LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPOVERLAPPED lpOverlapped // address of structure for data
);


BOOL WriteFile(

HANDLE hFile, // handle to file to write to
LPCVOID lpBuffer, // pointer to data to write to file
DWORD nNumberOfBytesToWrite, // number of bytes to write
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O
);



LPDWORD lpNumberOfBytesRead, // address of number of bytes read
LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written

顾名思义,就是实际写入了多少个字节
bitpolar 2007-03-30
  • 打赏
  • 举报
回复
打开的时候以Create|Append方式打开
王集鹄 2007-03-30
  • 打赏
  • 举报
回复
vFileStream.Seek(0, SeekOrigin.End); //读写位置移到最后,不行吗?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧