One wrong assumption I keep seeing in this thread is that if you can read a format, then you can write it. That's simply not true. You may not have enough information.
For instance, suppose that a file format contains a checksum, with the calculation of the checksum undocumented. In that case, you will be able to read the file, although you will not be able to verify that the checksum is correct. You will not be able to write a correct file, since you don't have enough information. Therefore, the existence of a free program to read a file format does not imply that a program can be written to write that file format in a way acceptable to the non-free program that originated the format. It does imply, I think, that you can write a free program to write the file format in a way acceptable to the free program that reads the file format. I'm not sure that this has any bearing on the issue, but I think it's worth mentioning anyway.

