2016-02-25 42 views
1

我正在编写一个将文本文件转换为二进制文件的C程序,反之亦然。我的第一个问题是关于以“w”模式打开文件。是否需要检查输出文件是否正确打开?以写入模式在C中打开文件

FILE *output; 
output = fopen("output.bin", "w"); 
if(output == NULL) 
    { printf("Error opening output file\n");} 

基本上我的问题是,是否输出将永远实际上== NULL。因为如果打开输出时出现问题,它不会创建一个名为“output.bin”的新文件吗?

另外我的另一个问题是字符如何实际保存在二进制文件中。我知道我应该将每个字符保存为一个无符号字符,因此它可以具有0到255之间的值,然后我应该将该字符写入输出文件。如果有人能帮助我或指出我朝着正确的方向,那么发生这种事情的实际逻辑路径是没有意义的,我将不胜感激!

+0

什么意思是“将文本文件转换为二进制文件,反之亦然”? – e0k

+0

“是否需要检查输出文件是否正确打开”。是的,你需要检查返回值。至少这是一个好习惯。当然,开放可能会失败,原因很多。例如,没有权限在当前目录中创建文件。或文件已存在但不可写入。 – kaylum

+0

我应该有二进制文件保存L字节(字符串)和4字节(整数),其中L =字符串的长度。 1字节是L.的值我希望我能解释更多,但我仍然试图了解如何存储和表示二进制文件 – John

回答

3

是的,在写入模式下打开文件可能仍然失败。以下是一些可能的原因,但当然不是唯一的原因:

  • 您没有创建或更改文件的权限。
  • 该文件是只读的,或者它所在的目录是只读的。
  • 该文件将在另一个文件中。 (test/foo如果test是一个文件,而不是一个目录)
  • 文件系统空间不足或inode(在存储的inode固定数量的文件系统)
  • 用户已经达到他们的磁盘空间配额。
  • 该文件将在另一台计算机上,并且网络已关闭。
  • 文件名无效 - 例如在Windows上为C:/???*\\\\foo
  • 文件名太长。
相关问题