由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Thoughts版 - 求助,怎么在文件中插入或删除?
相关主题
Re: 我跟你说说IT程序员的那点事儿 (转载)说MSFT邪恶,Google笑了
5呢?怎样让对方读文件一次,读完以后,对方立刻就忘? (转载)
[合集] 人脑的存量(储)有多大?你们是怎样管理计算机文件的
Time machine怎么增大备份时间间隔?从‘中朝密件’谈起
小圈子研究让我想起来那个"zhaomaja"网站30秒清除你电脑中的垃圾(使你电脑急速如飞)
Re: 問學術板 (转载)[合集] 30秒清除你电脑中的垃圾(使你电脑急速如飞)
JavaScript这不同的实现差别太大了继续求解office 2010不能同时打开文件的问题
继续圡Snow Leopard:安装进度条背后的故事【连载3/23】
相关话题的讨论汇总
话题: 字节话题: 文件话题: 磁盘话题: 插入话题: 删除
进入Thoughts版参与讨论
1 (共1页)
kx
发帖数: 16384
1
就是如何编程实现对一个文件,随机插入或者删除一个字节
我只知道如何从头开始顺序读写,或者文件尾部追加写入
或者用随机定位函数任意定位后读写该位置的内容
但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
可是如果很大的文件这样做就太辛苦了
我想应该有在任意位置插入或删除的办法的吧
x******n
发帖数: 9057
2
能有啥办法?修改的位置后面的部分肯定得重写啊。
一般需要修改大文件的程序为了不在修改期间使得这个文件不可用,会先用另外一个文
件名写,完了再rename到原来的文件名,并且删除原来的文件。不过最多就需要两倍的
磁盘空间了。要是主流的文件系统支持只重写修改了的部分的方法,这些程序早就用了。
太阳的zfs倒是支持冗余的磁盘块只保存一次,也就是说你如果把一个文件复制一次,
并不占用额外的磁盘空间。但是你添加或者删除一个字符,后面所有的磁盘块都要变吧
。。除非磁盘块和数据库的数据块一样支持里面有不用的字节。这个我倒没有研究过,
不过没听说过可以这样。

【在 kx 的大作中提到】
: 就是如何编程实现对一个文件,随机插入或者删除一个字节
: 我只知道如何从头开始顺序读写,或者文件尾部追加写入
: 或者用随机定位函数任意定位后读写该位置的内容
: 但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
: 变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
: 可是如果很大的文件这样做就太辛苦了
: 我想应该有在任意位置插入或删除的办法的吧

kx
发帖数: 16384
3
居然是这样啊
我震惊了
可现在操作系统不都是支持文件碎片的么,
也就是说同一个文件可以分成多个部分,存在不同的地方,
那我猜每个部分开始和结束的地方,
肯定跟链表一样存有下一个磁盘块的地址,总不可能把每个部分的地址都存在操作系统里
如果都能做到这点了,
那文件里面插入或者删除一部分内容应该也是可以做到的吧
像链表一样处理就行
可居然会不支持:(

了。

【在 x******n 的大作中提到】
: 能有啥办法?修改的位置后面的部分肯定得重写啊。
: 一般需要修改大文件的程序为了不在修改期间使得这个文件不可用,会先用另外一个文
: 件名写,完了再rename到原来的文件名,并且删除原来的文件。不过最多就需要两倍的
: 磁盘空间了。要是主流的文件系统支持只重写修改了的部分的方法,这些程序早就用了。
: 太阳的zfs倒是支持冗余的磁盘块只保存一次,也就是说你如果把一个文件复制一次,
: 并不占用额外的磁盘空间。但是你添加或者删除一个字符,后面所有的磁盘块都要变吧
: 。。除非磁盘块和数据库的数据块一样支持里面有不用的字节。这个我倒没有研究过,
: 不过没听说过可以这样。

x******n
发帖数: 9057
4
但是每个磁盘块是装满的啊,要实现你说的必须要么插入和删除整磁盘块的内容,要么
允许磁盘块里有气泡。

统里

【在 kx 的大作中提到】
: 居然是这样啊
: 我震惊了
: 可现在操作系统不都是支持文件碎片的么,
: 也就是说同一个文件可以分成多个部分,存在不同的地方,
: 那我猜每个部分开始和结束的地方,
: 肯定跟链表一样存有下一个磁盘块的地址,总不可能把每个部分的地址都存在操作系统里
: 如果都能做到这点了,
: 那文件里面插入或者删除一部分内容应该也是可以做到的吧
: 像链表一样处理就行
: 可居然会不支持:(

kx
发帖数: 16384
5
不要气泡啊
比如假设原来一个连续的数据块是100格,因为他和后续的数据是连续存放的,
所以所有的100格里面都是放的数据
现在要插入1格,
那就把原来的100的最后1格换成地址,然后把这第100格和插入的1格放到那个地址所指
向的地方
这样的坏处就是要有一个标志,来表示每格里面放的到底是数据还是地址
hoho
够敢想吧
;)

【在 x******n 的大作中提到】
: 但是每个磁盘块是装满的啊,要实现你说的必须要么插入和删除整磁盘块的内容,要么
: 允许磁盘块里有气泡。
:
: 统里

x******n
发帖数: 9057
6
看不懂,你说的一格是一个字节还是一个磁盘块啊,你说的插入是插入到中间还是添加
到末尾啊?

【在 kx 的大作中提到】
: 不要气泡啊
: 比如假设原来一个连续的数据块是100格,因为他和后续的数据是连续存放的,
: 所以所有的100格里面都是放的数据
: 现在要插入1格,
: 那就把原来的100的最后1格换成地址,然后把这第100格和插入的1格放到那个地址所指
: 向的地方
: 这样的坏处就是要有一个标志,来表示每格里面放的到底是数据还是地址
: hoho
: 够敢想吧
: ;)

kx
发帖数: 16384
7
我说一格就是一个单位的意思
管他一个字节还是一个磁盘块呢
不过我想放地址的话,用不着太多位吧
我换个方式重说一遍
假设有个150字节的文件,在磁盘上连续存放
现在我要在100字节处插入1个字节
再假设地址需要32位4个字节的话
那就把97-100共4个字节的数据提取出来,
存放地址,指向一个新的磁盘位置
然后在该磁盘位置,存上原来97-100的4个字节的数据,再加上原本想要插入的1个字节
数据,共5个字节,结尾再用4个字节,存放地址,指向原来的
101字节的地址
就连上啦,哈哈

所指

【在 x******n 的大作中提到】
: 看不懂,你说的一格是一个字节还是一个磁盘块啊,你说的插入是插入到中间还是添加
: 到末尾啊?

x******n
发帖数: 9057
8
磁盘存储是以块为单位的,比如4K,所谓的指针链接也是指块之间,块内是连续的数据
,所以你的150字节的文件需要占用一个块,也就是4KB的磁盘空间。按照你这种插入法
,就是说你的新文件要占用3个块,12KB,其中第一个块包含100字节数据,第二个块包
含5字节数据,第三个块包含46字节数据,自然三个块里大部分都是气泡了。我不知道
有哪种文件系统支持块里有气泡的(除去最后一块),理论上当然可能,数据库文件一
般就是这样的,不过文件系统毕竟和数据库很不一样,不值得为了像你说的这种少见的
use case来严重牺牲性能。
当然你要想设计一种一块就是一个字节的文件系统,那也行,不过你这个描述还是不够
,你咋知道97-100这4个字节的位置存的是指针而不是数据?于是乎每个字节你要拿出
一位来存放一个标志位,于是乎你160个字节的空间只能存放140个字节的数据,而且都
乱了套了,读取的时候还得解码。

【在 kx 的大作中提到】
: 我说一格就是一个单位的意思
: 管他一个字节还是一个磁盘块呢
: 不过我想放地址的话,用不着太多位吧
: 我换个方式重说一遍
: 假设有个150字节的文件,在磁盘上连续存放
: 现在我要在100字节处插入1个字节
: 再假设地址需要32位4个字节的话
: 那就把97-100共4个字节的数据提取出来,
: 存放地址,指向一个新的磁盘位置
: 然后在该磁盘位置,存上原来97-100的4个字节的数据,再加上原本想要插入的1个字节

kx
发帖数: 16384
9
那文件碎片化存放是怎么实现的呢?
就用那个方式不行么?
就是中间加了一个碎片呗

字节

【在 x******n 的大作中提到】
: 磁盘存储是以块为单位的,比如4K,所谓的指针链接也是指块之间,块内是连续的数据
: ,所以你的150字节的文件需要占用一个块,也就是4KB的磁盘空间。按照你这种插入法
: ,就是说你的新文件要占用3个块,12KB,其中第一个块包含100字节数据,第二个块包
: 含5字节数据,第三个块包含46字节数据,自然三个块里大部分都是气泡了。我不知道
: 有哪种文件系统支持块里有气泡的(除去最后一块),理论上当然可能,数据库文件一
: 般就是这样的,不过文件系统毕竟和数据库很不一样,不值得为了像你说的这种少见的
: use case来严重牺牲性能。
: 当然你要想设计一种一块就是一个字节的文件系统,那也行,不过你这个描述还是不够
: ,你咋知道97-100这4个字节的位置存的是指针而不是数据?于是乎每个字节你要拿出
: 一位来存放一个标志位,于是乎你160个字节的空间只能存放140个字节的数据,而且都

x******n
发帖数: 9057
10
我第二段不就是在说为啥你这个方式不行么?
一个文件包含多个磁盘块啊,每个块可以位于磁盘上的任何位置啊,块之间使用指针链
接起来的啊。如果块太大,就不能充分利用每个文件最后一个块里的空间;如果块太小
,指针的overhead就大了。

【在 kx 的大作中提到】
: 那文件碎片化存放是怎么实现的呢?
: 就用那个方式不行么?
: 就是中间加了一个碎片呗
:
: 字节

相关主题
Re: 問學術板 (转载)说MSFT邪恶,Google笑了
JavaScript这不同的实现差别太大了怎样让对方读文件一次,读完以后,对方立刻就忘? (转载)
继续圡你们是怎样管理计算机文件的
进入Thoughts版参与讨论
kx
发帖数: 16384
11

我理解成别的意思了
以为你说的是一种设想
而其实就是现行的做法了
不过,对一个很大的文件来说,
就算为了插入一个字节,消耗4k的磁盘块,总比完全重写整个文件要划算一点吧
或者小文件就完全重写,大文件就用碎片管理的方法插入?
当然,我也知道,对比的双方一个是磁盘空间,一个是资源的消耗,不完全可比

【在 x******n 的大作中提到】
: 我第二段不就是在说为啥你这个方式不行么?
: 一个文件包含多个磁盘块啊,每个块可以位于磁盘上的任何位置啊,块之间使用指针链
: 接起来的啊。如果块太大,就不能充分利用每个文件最后一个块里的空间;如果块太小
: ,指针的overhead就大了。

d*****9
发帖数: 3459
12
unix下用split命令先把file分成下files,然后随意加减(echo》或trancate),后再用cat把files into one file。

【在 kx 的大作中提到】
: 就是如何编程实现对一个文件,随机插入或者删除一个字节
: 我只知道如何从头开始顺序读写,或者文件尾部追加写入
: 或者用随机定位函数任意定位后读写该位置的内容
: 但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
: 变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
: 可是如果很大的文件这样做就太辛苦了
: 我想应该有在任意位置插入或删除的办法的吧

x******n
发帖数: 9057
13
这个cat不就是把文件重写一次。。

再用cat把files into one file。

【在 d*****9 的大作中提到】
: unix下用split命令先把file分成下files,然后随意加减(echo》或trancate),后再用cat把files into one file。
x******n
发帖数: 9057
14
但是重写大文件再现实中很少需要的,一般的用户数据文件都比较小,比较大的基本只
有数据库的例子,而数据库是不依赖文件系统自己直接管理磁盘空间的,支持块里有气
泡。大的文件需要重写的例子有,比如sphinx的全文索引,但是很少。
你如果需要经常重写大的数据文件,可以考虑:
1. 使用多个小的数据文件,代替单个大文件
2. 使用一个delta文件,定期和主文件合并
3. 使用SQLite数据库

【在 kx 的大作中提到】
: 哦
: 我理解成别的意思了
: 以为你说的是一种设想
: 而其实就是现行的做法了
: 不过,对一个很大的文件来说,
: 就算为了插入一个字节,消耗4k的磁盘块,总比完全重写整个文件要划算一点吧
: 或者小文件就完全重写,大文件就用碎片管理的方法插入?
: 当然,我也知道,对比的双方一个是磁盘空间,一个是资源的消耗,不完全可比

d*****9
发帖数: 3459
15
那就echo后面的文件到前面的就是了。
不过,俺记不得了,hd management有没有允许俩文件都reference同一block without
making a duplicate before any changes?譬如copy cmd。

【在 x******n 的大作中提到】
: 这个cat不就是把文件重写一次。。
:
: 再用cat把files into one file。

x******n
发帖数: 9057
16
zfs有这个功能,大部分文件系统都不支持。如果支持的话对应用是透明的,跟copy
cmd啥没关系,这些应用层程序是构建于文件系统之上的,不会知道什么数据存在了哪
个磁盘块里。
不过要在文件中间插入字节,不是这么简单的,除非你插入的是一个block大小的整数
倍,否则后面所有的block必然都和以前不同了。

without

【在 d*****9 的大作中提到】
: 那就echo后面的文件到前面的就是了。
: 不过,俺记不得了,hd management有没有允许俩文件都reference同一block without
: making a duplicate before any changes?譬如copy cmd。

kx
发帖数: 16384
17
了解
清楚
got it
3q

【在 x******n 的大作中提到】
: 但是重写大文件再现实中很少需要的,一般的用户数据文件都比较小,比较大的基本只
: 有数据库的例子,而数据库是不依赖文件系统自己直接管理磁盘空间的,支持块里有气
: 泡。大的文件需要重写的例子有,比如sphinx的全文索引,但是很少。
: 你如果需要经常重写大的数据文件,可以考虑:
: 1. 使用多个小的数据文件,代替单个大文件
: 2. 使用一个delta文件,定期和主文件合并
: 3. 使用SQLite数据库

kx
发帖数: 16384
18
就是如何编程实现对一个文件,随机插入或者删除一个字节
我只知道如何从头开始顺序读写,或者文件尾部追加写入
或者用随机定位函数任意定位后读写该位置的内容
但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
可是如果很大的文件这样做就太辛苦了
我想应该有在任意位置插入或删除的办法的吧
x******n
发帖数: 9057
19
能有啥办法?修改的位置后面的部分肯定得重写啊。
一般需要修改大文件的程序为了不在修改期间使得这个文件不可用,会先用另外一个文
件名写,完了再rename到原来的文件名,并且删除原来的文件。不过最多就需要两倍的
磁盘空间了。要是主流的文件系统支持只重写修改了的部分的方法,这些程序早就用了。
太阳的zfs倒是支持冗余的磁盘块只保存一次,也就是说你如果把一个文件复制一次,
并不占用额外的磁盘空间。但是你添加或者删除一个字符,后面所有的磁盘块都要变吧
。。除非磁盘块和数据库的数据块一样支持里面有不用的字节。这个我倒没有研究过,
不过没听说过可以这样。

【在 kx 的大作中提到】
: 就是如何编程实现对一个文件,随机插入或者删除一个字节
: 我只知道如何从头开始顺序读写,或者文件尾部追加写入
: 或者用随机定位函数任意定位后读写该位置的内容
: 但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
: 变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
: 可是如果很大的文件这样做就太辛苦了
: 我想应该有在任意位置插入或删除的办法的吧

kx
发帖数: 16384
20
居然是这样啊
我震惊了
可现在操作系统不都是支持文件碎片的么,
也就是说同一个文件可以分成多个部分,存在不同的地方,
那我猜每个部分开始和结束的地方,
肯定跟链表一样存有下一个磁盘块的地址,总不可能把每个部分的地址都存在操作系统里
如果都能做到这点了,
那文件里面插入或者删除一部分内容应该也是可以做到的吧
像链表一样处理就行
可居然会不支持:(

了。

【在 x******n 的大作中提到】
: 能有啥办法?修改的位置后面的部分肯定得重写啊。
: 一般需要修改大文件的程序为了不在修改期间使得这个文件不可用,会先用另外一个文
: 件名写,完了再rename到原来的文件名,并且删除原来的文件。不过最多就需要两倍的
: 磁盘空间了。要是主流的文件系统支持只重写修改了的部分的方法,这些程序早就用了。
: 太阳的zfs倒是支持冗余的磁盘块只保存一次,也就是说你如果把一个文件复制一次,
: 并不占用额外的磁盘空间。但是你添加或者删除一个字符,后面所有的磁盘块都要变吧
: 。。除非磁盘块和数据库的数据块一样支持里面有不用的字节。这个我倒没有研究过,
: 不过没听说过可以这样。

相关主题
从‘中朝密件’谈起继续求解office 2010不能同时打开文件的问题
30秒清除你电脑中的垃圾(使你电脑急速如飞)Snow Leopard:安装进度条背后的故事【连载3/23】
[合集] 30秒清除你电脑中的垃圾(使你电脑急速如飞)IP6第三次出现磁盘空间不够了...
进入Thoughts版参与讨论
x******n
发帖数: 9057
21
但是每个磁盘块是装满的啊,要实现你说的必须要么插入和删除整磁盘块的内容,要么
允许磁盘块里有气泡。

统里

【在 kx 的大作中提到】
: 居然是这样啊
: 我震惊了
: 可现在操作系统不都是支持文件碎片的么,
: 也就是说同一个文件可以分成多个部分,存在不同的地方,
: 那我猜每个部分开始和结束的地方,
: 肯定跟链表一样存有下一个磁盘块的地址,总不可能把每个部分的地址都存在操作系统里
: 如果都能做到这点了,
: 那文件里面插入或者删除一部分内容应该也是可以做到的吧
: 像链表一样处理就行
: 可居然会不支持:(

kx
发帖数: 16384
22
不要气泡啊
比如假设原来一个连续的数据块是100格,因为他和后续的数据是连续存放的,
所以所有的100格里面都是放的数据
现在要插入1格,
那就把原来的100的最后1格换成地址,然后把这第100格和插入的1格放到那个地址所指
向的地方
这样的坏处就是要有一个标志,来表示每格里面放的到底是数据还是地址
hoho
够敢想吧
;)

【在 x******n 的大作中提到】
: 但是每个磁盘块是装满的啊,要实现你说的必须要么插入和删除整磁盘块的内容,要么
: 允许磁盘块里有气泡。
:
: 统里

x******n
发帖数: 9057
23
看不懂,你说的一格是一个字节还是一个磁盘块啊,你说的插入是插入到中间还是添加
到末尾啊?

【在 kx 的大作中提到】
: 不要气泡啊
: 比如假设原来一个连续的数据块是100格,因为他和后续的数据是连续存放的,
: 所以所有的100格里面都是放的数据
: 现在要插入1格,
: 那就把原来的100的最后1格换成地址,然后把这第100格和插入的1格放到那个地址所指
: 向的地方
: 这样的坏处就是要有一个标志,来表示每格里面放的到底是数据还是地址
: hoho
: 够敢想吧
: ;)

kx
发帖数: 16384
24
我说一格就是一个单位的意思
管他一个字节还是一个磁盘块呢
不过我想放地址的话,用不着太多位吧
我换个方式重说一遍
假设有个150字节的文件,在磁盘上连续存放
现在我要在100字节处插入1个字节
再假设地址需要32位4个字节的话
那就把97-100共4个字节的数据提取出来,
存放地址,指向一个新的磁盘位置
然后在该磁盘位置,存上原来97-100的4个字节的数据,再加上原本想要插入的1个字节
数据,共5个字节,结尾再用4个字节,存放地址,指向原来的
101字节的地址
就连上啦,哈哈

所指

【在 x******n 的大作中提到】
: 看不懂,你说的一格是一个字节还是一个磁盘块啊,你说的插入是插入到中间还是添加
: 到末尾啊?

x******n
发帖数: 9057
25
磁盘存储是以块为单位的,比如4K,所谓的指针链接也是指块之间,块内是连续的数据
,所以你的150字节的文件需要占用一个块,也就是4KB的磁盘空间。按照你这种插入法
,就是说你的新文件要占用3个块,12KB,其中第一个块包含100字节数据,第二个块包
含5字节数据,第三个块包含46字节数据,自然三个块里大部分都是气泡了。我不知道
有哪种文件系统支持块里有气泡的(除去最后一块),理论上当然可能,数据库文件一
般就是这样的,不过文件系统毕竟和数据库很不一样,不值得为了像你说的这种少见的
use case来严重牺牲性能。
当然你要想设计一种一块就是一个字节的文件系统,那也行,不过你这个描述还是不够
,你咋知道97-100这4个字节的位置存的是指针而不是数据?于是乎每个字节你要拿出
一位来存放一个标志位,于是乎你160个字节的空间只能存放140个字节的数据,而且都
乱了套了,读取的时候还得解码。

【在 kx 的大作中提到】
: 我说一格就是一个单位的意思
: 管他一个字节还是一个磁盘块呢
: 不过我想放地址的话,用不着太多位吧
: 我换个方式重说一遍
: 假设有个150字节的文件,在磁盘上连续存放
: 现在我要在100字节处插入1个字节
: 再假设地址需要32位4个字节的话
: 那就把97-100共4个字节的数据提取出来,
: 存放地址,指向一个新的磁盘位置
: 然后在该磁盘位置,存上原来97-100的4个字节的数据,再加上原本想要插入的1个字节

kx
发帖数: 16384
26
那文件碎片化存放是怎么实现的呢?
就用那个方式不行么?
就是中间加了一个碎片呗

字节

【在 x******n 的大作中提到】
: 磁盘存储是以块为单位的,比如4K,所谓的指针链接也是指块之间,块内是连续的数据
: ,所以你的150字节的文件需要占用一个块,也就是4KB的磁盘空间。按照你这种插入法
: ,就是说你的新文件要占用3个块,12KB,其中第一个块包含100字节数据,第二个块包
: 含5字节数据,第三个块包含46字节数据,自然三个块里大部分都是气泡了。我不知道
: 有哪种文件系统支持块里有气泡的(除去最后一块),理论上当然可能,数据库文件一
: 般就是这样的,不过文件系统毕竟和数据库很不一样,不值得为了像你说的这种少见的
: use case来严重牺牲性能。
: 当然你要想设计一种一块就是一个字节的文件系统,那也行,不过你这个描述还是不够
: ,你咋知道97-100这4个字节的位置存的是指针而不是数据?于是乎每个字节你要拿出
: 一位来存放一个标志位,于是乎你160个字节的空间只能存放140个字节的数据,而且都

x******n
发帖数: 9057
27
我第二段不就是在说为啥你这个方式不行么?
一个文件包含多个磁盘块啊,每个块可以位于磁盘上的任何位置啊,块之间使用指针链
接起来的啊。如果块太大,就不能充分利用每个文件最后一个块里的空间;如果块太小
,指针的overhead就大了。

【在 kx 的大作中提到】
: 那文件碎片化存放是怎么实现的呢?
: 就用那个方式不行么?
: 就是中间加了一个碎片呗
:
: 字节

kx
发帖数: 16384
28

我理解成别的意思了
以为你说的是一种设想
而其实就是现行的做法了
不过,对一个很大的文件来说,
就算为了插入一个字节,消耗4k的磁盘块,总比完全重写整个文件要划算一点吧
或者小文件就完全重写,大文件就用碎片管理的方法插入?
当然,我也知道,对比的双方一个是磁盘空间,一个是资源的消耗,不完全可比

【在 x******n 的大作中提到】
: 我第二段不就是在说为啥你这个方式不行么?
: 一个文件包含多个磁盘块啊,每个块可以位于磁盘上的任何位置啊,块之间使用指针链
: 接起来的啊。如果块太大,就不能充分利用每个文件最后一个块里的空间;如果块太小
: ,指针的overhead就大了。

d*****9
发帖数: 3459
29
unix下用split命令先把file分成下files,然后随意加减(echo》或trancate),后再用cat把files into one file。

【在 kx 的大作中提到】
: 就是如何编程实现对一个文件,随机插入或者删除一个字节
: 我只知道如何从头开始顺序读写,或者文件尾部追加写入
: 或者用随机定位函数任意定位后读写该位置的内容
: 但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
: 变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
: 可是如果很大的文件这样做就太辛苦了
: 我想应该有在任意位置插入或删除的办法的吧

x******n
发帖数: 9057
30
这个cat不就是把文件重写一次。。

再用cat把files into one file。

【在 d*****9 的大作中提到】
: unix下用split命令先把file分成下files,然后随意加减(echo》或trancate),后再用cat把files into one file。
相关主题
pogoplug pro刷 arch linux 磁盘空间不足5呢?
磁盘空间疑问[合集] 人脑的存量(储)有多大?
Re: 我跟你说说IT程序员的那点事儿 (转载)Time machine怎么增大备份时间间隔?
进入Thoughts版参与讨论
x******n
发帖数: 9057
31
但是重写大文件再现实中很少需要的,一般的用户数据文件都比较小,比较大的基本只
有数据库的例子,而数据库是不依赖文件系统自己直接管理磁盘空间的,支持块里有气
泡。大的文件需要重写的例子有,比如sphinx的全文索引,但是很少。
你如果需要经常重写大的数据文件,可以考虑:
1. 使用多个小的数据文件,代替单个大文件
2. 使用一个delta文件,定期和主文件合并
3. 使用SQLite数据库

【在 kx 的大作中提到】
: 哦
: 我理解成别的意思了
: 以为你说的是一种设想
: 而其实就是现行的做法了
: 不过,对一个很大的文件来说,
: 就算为了插入一个字节,消耗4k的磁盘块,总比完全重写整个文件要划算一点吧
: 或者小文件就完全重写,大文件就用碎片管理的方法插入?
: 当然,我也知道,对比的双方一个是磁盘空间,一个是资源的消耗,不完全可比

d*****9
发帖数: 3459
32
那就echo后面的文件到前面的就是了。
不过,俺记不得了,hd management有没有允许俩文件都reference同一block without
making a duplicate before any changes?譬如copy cmd。

【在 x******n 的大作中提到】
: 这个cat不就是把文件重写一次。。
:
: 再用cat把files into one file。

x******n
发帖数: 9057
33
zfs有这个功能,大部分文件系统都不支持。如果支持的话对应用是透明的,跟copy
cmd啥没关系,这些应用层程序是构建于文件系统之上的,不会知道什么数据存在了哪
个磁盘块里。
不过要在文件中间插入字节,不是这么简单的,除非你插入的是一个block大小的整数
倍,否则后面所有的block必然都和以前不同了。

without

【在 d*****9 的大作中提到】
: 那就echo后面的文件到前面的就是了。
: 不过,俺记不得了,hd management有没有允许俩文件都reference同一block without
: making a duplicate before any changes?譬如copy cmd。

kx
发帖数: 16384
34
了解
清楚
got it
3q

【在 x******n 的大作中提到】
: 但是重写大文件再现实中很少需要的,一般的用户数据文件都比较小,比较大的基本只
: 有数据库的例子,而数据库是不依赖文件系统自己直接管理磁盘空间的,支持块里有气
: 泡。大的文件需要重写的例子有,比如sphinx的全文索引,但是很少。
: 你如果需要经常重写大的数据文件,可以考虑:
: 1. 使用多个小的数据文件,代替单个大文件
: 2. 使用一个delta文件,定期和主文件合并
: 3. 使用SQLite数据库

m****5
发帖数: 9
35
一直以为你是元老,顺便问一下,怎么整行删除啊?每次删都用鼠标,累死了,一个字
一个字的删除,慢,累。

【在 kx 的大作中提到】
: 就是如何编程实现对一个文件,随机插入或者删除一个字节
: 我只知道如何从头开始顺序读写,或者文件尾部追加写入
: 或者用随机定位函数任意定位后读写该位置的内容
: 但是不知道如何在文件的任意位置定位后,插入或者删除一个字节
: 变通的做法,就只能重新建一个同名文件,从头开始全部重写一遍
: 可是如果很大的文件这样做就太辛苦了
: 我想应该有在任意位置插入或删除的办法的吧

A*******s
发帖数: 8645
36
哇,这个问题提得好!
我痛苦忍受了这么久,就没想到思索一下是不是有方便的方法。

【在 m****5 的大作中提到】
: 一直以为你是元老,顺便问一下,怎么整行删除啊?每次删都用鼠标,累死了,一个字
: 一个字的删除,慢,累。

kx
发帖数: 16384
37
这个问题我的司机毛人都知道
毛人,来帮帮他吧

【在 m****5 的大作中提到】
: 一直以为你是元老,顺便问一下,怎么整行删除啊?每次删都用鼠标,累死了,一个字
: 一个字的删除,慢,累。

kx
发帖数: 16384
38
具体好在哪儿?

个字

【在 A*******s 的大作中提到】
: 哇,这个问题提得好!
: 我痛苦忍受了这么久,就没想到思索一下是不是有方便的方法。

r****y
发帖数: 26819
39
你也是老鸟吧
两种办法
ctrl+y
或者
ctrl+u选中要删的所有行,最后Esc d删除

【在 A*******s 的大作中提到】
: 哇,这个问题提得好!
: 我痛苦忍受了这么久,就没想到思索一下是不是有方便的方法。

A*******s
发帖数: 8645
40
我是一只无知的老鸟,不行么?

【在 r****y 的大作中提到】
: 你也是老鸟吧
: 两种办法
: ctrl+y
: 或者
: ctrl+u选中要删的所有行,最后Esc d删除

相关主题
Time machine怎么增大备份时间间隔?JavaScript这不同的实现差别太大了
小圈子研究让我想起来那个"zhaomaja"网站继续圡
Re: 問學術板 (转载)说MSFT邪恶,Google笑了
进入Thoughts版参与讨论
A*******s
发帖数: 8645
41
我要是早这么问,就不用痛苦这么多年了
现在才明白某句哲理:
也许生活的确如此,但任何时候你都不能认为,生活就应该如此!

【在 kx 的大作中提到】
: 具体好在哪儿?
:
: 个字

r****y
发帖数: 26819
42
不是无知,是文科老鸟,耶!

【在 A*******s 的大作中提到】
: 我是一只无知的老鸟,不行么?
kx
发帖数: 16384
43
太奇怪了
这么久以来我就没碰到过你那个需求
所以我一开始都不知道你们说的是啥,
可如果用cterm发新帖的话,
不是都有文本编辑框么
除非就是修改贴的时候可能没法儿用文本编辑框,
得在telnet下改,这个时候才用的上老罗说的方法
可我改贴的需求量很小
所以从来就没觉得这是个事儿
哈哈
不过即使要在telnet下改贴
要想删,用鼠标选一下也能删除选中区域啊(编辑菜单中的自动复制要去掉)
老罗是厉害
什么都知道

【在 A*******s 的大作中提到】
: 我要是早这么问,就不用痛苦这么多年了
: 现在才明白某句哲理:
: 也许生活的确如此,但任何时候你都不能认为,生活就应该如此!

kx
发帖数: 16384
44
你俩掐得好看

【在 r****y 的大作中提到】
: 不是无知,是文科老鸟,耶!
A*******s
发帖数: 8645
45
说明你爱灌纯净水,不TS

【在 kx 的大作中提到】
: 太奇怪了
: 这么久以来我就没碰到过你那个需求
: 所以我一开始都不知道你们说的是啥,
: 可如果用cterm发新帖的话,
: 不是都有文本编辑框么
: 除非就是修改贴的时候可能没法儿用文本编辑框,
: 得在telnet下改,这个时候才用的上老罗说的方法
: 可我改贴的需求量很小
: 所以从来就没觉得这是个事儿
: 哈哈

kx
发帖数: 16384
46
有人在历史版写你写过的东西
离婚砍头啥的
看不下去啊

【在 A*******s 的大作中提到】
: 说明你爱灌纯净水,不TS
A*******s
发帖数: 8645
47
写的很好玩啊,好多史实都是我当初没有考到的。我那个是八卦,人家这个更尊重史料。
自从这个文某次上十大被我看见之后,俺就开始追看了,咔咔

【在 kx 的大作中提到】
: 有人在历史版写你写过的东西
: 离婚砍头啥的
: 看不下去啊

1 (共1页)
进入Thoughts版参与讨论
相关主题
Snow Leopard:安装进度条背后的故事【连载3/23】小圈子研究让我想起来那个"zhaomaja"网站
IP6第三次出现磁盘空间不够了...Re: 問學術板 (转载)
pogoplug pro刷 arch linux 磁盘空间不足JavaScript这不同的实现差别太大了
磁盘空间疑问继续圡
Re: 我跟你说说IT程序员的那点事儿 (转载)说MSFT邪恶,Google笑了
5呢?怎样让对方读文件一次,读完以后,对方立刻就忘? (转载)
[合集] 人脑的存量(储)有多大?你们是怎样管理计算机文件的
Time machine怎么增大备份时间间隔?从‘中朝密件’谈起
相关话题的讨论汇总
话题: 字节话题: 文件话题: 磁盘话题: 插入话题: 删除