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 的大作中提到】 : 那文件碎片化存放是怎么实现的呢? : 就用那个方式不行么? : 就是中间加了一个碎片呗 : : 字节
|
|
|
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倒是支持冗余的磁盘块只保存一次,也就是说你如果把一个文件复制一次, : 并不占用额外的磁盘空间。但是你添加或者删除一个字符,后面所有的磁盘块都要变吧 : 。。除非磁盘块和数据库的数据块一样支持里面有不用的字节。这个我倒没有研究过, : 不过没听说过可以这样。
|
|
|
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。
|
|
|
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删除
|
|
|
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 的大作中提到】 : 有人在历史版写你写过的东西 : 离婚砍头啥的 : 看不下去啊
|