writefile-大牛们,请问如何用windows API实现对文本文件的字符删除修改?

问题描述

大牛们,请问如何用windows API实现对文本文件的字符删除修改?

RT
想请问大家,想要删除指定的几个字符如何做到。我用WriteFile写入的b会出现乱码,可以这样做么?

解决方案

一些基本常识,文件在计算机里是怎么存的,似乎你不太清楚,我们用最简单的方式来说(真实的文件系统比这个复杂,但是你可以这么理解)
我们在磁盘上划分为两个部分,前面是文件分配表,记录文件名、文件长度、起始地址。
文件则位于磁盘后面,从起始地址到(起始地址+文件长度)
要想追加,直接在起始位置+文件长度的地址继续写下去就可以了。
要想截短,直接改变文件长度
但是要想在中间插入、删除,就没有直接的办法了。

解决方案二:

用ultraedit打开看下你写后的文件,注意两个问题
一个是你写入的位置是否正确,一个是你的编码是否和原来的一致。
另外,你只能改写文件,无论什么办法,如果你想从文件的中间删除字符,那么都是做不到的,只能将后面的文本再复制一遍,追加在删除的位置上。

解决方案三:

这是显而易见的。因为文件是连续存储在磁盘中的,而不是用的链表或者什么别的结构(文件系统使用簇,簇和簇之间可以不连续,但是一个簇内必须是连续的,NTFS上一个簇是4KB)

解决方案四:

这个很好理解,对于文件,要想把它截短,是很容易的。你直接把第三行接在后面写,写完以后设置下文件长度,就等于删除了。

解决方案五:

API函数中SetFilePointer SetEndOfFile就能办到。
当然,这是告诉你原理,实际上没必要那么计较这点性能,最好的办法还是读取到内存中,在内存中编辑字符串,一次性写回文件。

解决方案六:

打开文件的时候用二进制方式,然后注意写入长度等。

解决方案七:

我以为插入b退格符能删除前面一个字符的。。。结果按你说的用Ultraedit打开发现0D 0A 后又跟了一个08。。
难道真的只能把后面的文本复制一遍么?

时间: 2024-09-24 03:39:26

writefile-大牛们,请问如何用windows API实现对文本文件的字符删除修改?的相关文章

基于Windows API实现遍历所有文件并删除的方法_C 语言

本文实例讲述了基于Windows API实现遍历所有文件并删除的方法.分享给大家供大家参考.具体分析如下: 最近一直在学windows API,弄了一些好玩的东西(有点恶作剧了,请大家谨慎使用)... 下面是我现学现卖写的一个删除硬盘上所有文件的小程序 .... #include <windows.h> #include <stdio.h> #include <bitset> using namespace std; void DelFile(char *cFilePa

Windows API 函数列表 附帮助手册

原文:Windows API 函数列表 附帮助手册 所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了.   帮助手册:700多个Windows API的函数手册 免费下载   API之网络函数 API之消息函数 API之文件处理函数 API之打印函数 API之文本和字体函数 API之菜单函数 API之位图.图标和光栅运算函数 API之绘图函数 API之设备场景函数 API之硬件与系统函数 API之进程和线程函数 API之控件与消息函数     1. API

镜像-请问如何用easyboot制作WIN7系统装机盘

问题描述 请问如何用easyboot制作WIN7系统装机盘 1C 我在网上查了许多材料发现版本太多了不知道用哪一个也不知道适不适用于WIN7系统盘的制作.我目前所准备的工具如下:1.EASYBOOT 5.1.0.5652.img文件:DISKGENIUS.DM10.ghost.MEMTEST.PQ805CHT.红叶DOS工具箱2010年升级3.win7.bif 从网上下的,在某资料中看到,不知道有什么作用,也不知道这个文件是否需要编辑.4.gho文件:从雨林木风下的ISO文件,提取其中的win7

C#+Windows API操纵系统菜单

window|菜单 一.前言 本文针对C#.NET中没有提供直接的类似SystemMenu的属性或类似GetSystemMenu的成员函数的情况,通过调用Windows API设计了一个C#类SystemMenu,从而实现了传统的对于系统菜单的操作. 二.系统菜单简介 当你单击窗口图标或右击窗口标题栏时系统菜单即弹出.它包含当前窗口的默认行为.不同窗口的系统菜单看起来有些不同,如一个正常窗口的系统菜单看起来与一个工具栏子对话框窗口的菜单就不一样. 修改系统菜单的好处: ·添加应用程序自己定义的菜

C#+低级Windows API钩子拦截键盘输入

window 一. 简介 猫和婴儿有很多共同之处.他们都喜欢吃家中养植的植物,都非常讨厌关门.他们也都爱玩弄你的键盘,结果是,你正发送给你的老板的电子邮件可能是以半截句子发送出去的,你的Excel帐户也被加入了一些乱七八糟的内容,并且你还没有注意到,当打开Windows资源管理器时,若干文件已经被移到了回收站! 其解决方案是,开发一个应用程序实现如下功能:只要键盘处于"威胁状态"你就可以进行切换,并确保任何键盘输入活动都不会造成危害.本文想展示如何使用一种低级Windows API钩子

C#调用windows api的要点

window     在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助.另外如果安装了Visual Studio .net的话,在C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\P

用Visual C#调用Windows API函数(转)

visual|window|函数 用Visual C#调用Windows API函数 北京机械工业学院研00级(100085)冉林仓       Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口, 也就是说具备调用动态连接库的能力.Visual C#和其它开发工具一样也能够调用动态链接库的API函数..NET框架本身提供了这样一种

C#中调用Windows API的要点

window 在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的.本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助.另外如果安装了Visual Studio .net的话,在C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Interop\Platf

用Visual C#调用Windows API函数

visual|window|函数 Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口, 也就是说具备调用动态连接库的能力.Visual C#和其它开发工具一样也能够调用动态链接库的API函数..NET框架本身提供了这样一种服务,允许受管辖的代码调用动态链接库中实现的非受管辖函数,包括操作系统提供的Windows API函数.它能够定