D - file manipulation: is this possible?
- Andrew Edwards (6/6) Oct 06 2002 Is there a way to add information to the beginning of a file without
- Walter (4/10) Oct 06 2002 No.
-
Andrew Edwards
(23/23)
Oct 07 2002
"Walter"
wrote in message - Walter (12/33) Oct 07 2002 It comes down to the way the operating system writes files to the disk. ...
- Sandor Hojtsy (9/20) Oct 07 2002 The limitation is not in the languages, but in the Operating System, and...
- Robert W. Cunningham (11/34) Oct 08 2002 Back in the early '80s I helped hack the BSD 4.0 filesystem seek()/fseek...
- Roberto Mariottini (32/41) Oct 09 2002 to
Is there a way to add information to the beginning of a file without overwriting the content? if at all possible, please provide the d way and a c++ equivalent. only way I now to do it is to use two files, adding the new info to a temp file, copying old file to end of temp file and then deleting old file and renaming temp. However, I'd like to manipulate the file internally.
Oct 06 2002
"Andrew Edwards" <crxace13 comcast.net> wrote in message news:anqpl2$2gdi$1 digitaldaemon.com...Is there a way to add information to the beginning of a file without overwriting the content?No.if at all possible, please provide the d way and a c++ equivalent. only way I now to do it is to use two files, adding the new info to a temp file, copying old file to end of temp file and then deleting old file and renaming temp. However, I'd like to manipulate the file internally.I'd use an in-memory buffer, so no need to write multiple files.
Oct 06 2002
"Walter" <walter digitalmars.com> wrote in message news:anr2th$2ps1$1 digitaldaemon.com... | | "Andrew Edwards" <crxace13 comcast.net> wrote in message | news:anqpl2$2gdi$1 digitaldaemon.com... | > Is there a way to add information to the beginning of a file without | > overwriting the content? | | No. Don't you find it necessary to do things like this? How do you accomplish the task during those times? Is it simply not used enough to warrant adressing this issue? | > if at all possible, please provide the d way and a c++ equivalent. | > | > only way I now to do it is to use two files, adding the new info to a temp | > file, copying old file to end of temp file and then deleting old file and | > renaming temp. However, I'd like to manipulate the file internally. | | I'd use an in-memory buffer, so no need to write multiple files. | example please?
Oct 07 2002
"Andrew Edwards" <crxace13 comcast.net> wrote in message news:anrkq8$bv2$1 digitaldaemon.com..."Walter" <walter digitalmars.com> wrote in message news:anr2th$2ps1$1 digitaldaemon.com... | "Andrew Edwards" <crxace13 comcast.net> wrote in message | news:anqpl2$2gdi$1 digitaldaemon.com... | > Is there a way to add information to the beginning of a file without | > overwriting the content? | No. Don't you find it necessary to do things like this? How do you accomplish the task during those times? Is it simply not used enough to warrant adressing this issue?It comes down to the way the operating system writes files to the disk. If you want to prepend to a file, the file will need to be rewritten. It's not a big problem, just a routine programming chore.| > if at all possible, please provide the d way and a c++ equivalent. | > | > only way I now to do it is to use two files, adding the new info to a temp | > file, copying old file to end of temp file and then deleting old file and | > renaming temp. However, I'd like to manipulate the file internally. | | I'd use an in-memory buffer, so no need to write multiple files. | example please?Here's some pseudo code to illustrate the algorithm: byte[] a; // data to prepend byte[] b; byte[] c; <read file into b[]> c = a ~ b; // create buffer containing new file data <write c[] into file>
Oct 07 2002
"Walter" <walter digitalmars.com> wrote in message news:anr2th$2ps1$1 digitaldaemon.com..."Andrew Edwards" <crxace13 comcast.net> wrote in message news:anqpl2$2gdi$1 digitaldaemon.com...The limitation is not in the languages, but in the Operating System, and the File System.Is there a way to add information to the beginning of a file without overwriting the content?No.tempif at all possible, please provide the d way and a c++ equivalent. only way I now to do it is to use two files, adding the new info to aandfile, copying old file to end of temp file and then deleting old fileMaybe a library could do this for you, emulating the possibility of insertion. But it would be so extremely slow that noone intended to implement it.renaming temp. However, I'd like to manipulate the file internally.I'd use an in-memory buffer, so no need to write multiple files.
Oct 07 2002
Back in the early '80s I helped hack the BSD 4.0 filesystem seek()/fseek() calls to accept negative offsets from the beginning of the file. We had to kluge the inodes, but we made it work. The hack would be automagically undone the next time the file was rewritten. The main change was allowing the first block in a file to start with unallocated/free space, so the first byte of the file could be at any offset within the first block. It was extremely easy to completely screw up a file using this capability, but it still had lots of nifty uses. But you have to reach deep inside the filesystem to make it happen. -BobC Sandor Hojtsy wrote:"Walter" <walter digitalmars.com> wrote in message news:anr2th$2ps1$1 digitaldaemon.com..."Andrew Edwards" <crxace13 comcast.net> wrote in message news:anqpl2$2gdi$1 digitaldaemon.com...The limitation is not in the languages, but in the Operating System, and the File System.Is there a way to add information to the beginning of a file without overwriting the content?No.tempif at all possible, please provide the d way and a c++ equivalent. only way I now to do it is to use two files, adding the new info to aandfile, copying old file to end of temp file and then deleting old fileMaybe a library could do this for you, emulating the possibility of insertion. But it would be so extremely slow that noone intended to implement it.renaming temp. However, I'd like to manipulate the file internally.I'd use an in-memory buffer, so no need to write multiple files.
Oct 08 2002
"Robert W. Cunningham" <FlyPG users.sourceforge.net> ha scritto nel messaggio news:3DA3873E.C95307F4 users.sourceforge.net...Back in the early '80s I helped hack the BSD 4.0 filesystem seek()/fseek() calls to accept negative offsets from the beginning of the file. We hadtokluge the inodes, but we made it work. The hack would be automagicallyundonethe next time the file was rewritten. The main change was allowing thefirstblock in a file to start with unallocated/free space, so the first byte ofthefile could be at any offset within the first block. It was extremely easy to completely screw up a file using this capability,butit still had lots of nifty uses. But you have to reach deep inside the filesystem to make it happen.Yes. I always stated it was possible and EASY to do, but I couldn't prove it. The full story is that operating systems were invented when only magnetic tapes and punched cards were available. This particular kind of devices limited file access to a sequential start-to-end operation. And the only way to add some data to a file was to append to it, because before this file there could be another file in the tape/card sequence. Today, with random access block devices as disks, if it's not yet possible to do it is due only to the operating system designers' lazyness. I had to patch a program that filled the disk every time the user attempted to add a little image file to a big image library: it copied away the whole library only to add a little one. Why? The image index was at the beginning of the library file, so to update it the librarian program had to make a copy of the whole library. My patch was to put the index at the end of the library file, but it could be unnecessary if the OS permitted to enlarge a file from the beginning and not only from the end. Ciao
Oct 09 2002