免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2901 | 回复: 6
打印 上一主题 下一主题

fseek问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-23 12:39 |只看该作者 |倒序浏览
写DES加密器的问题,想把密文写入文件,用fseek移动到文件最后写,可总是不能成功。
程序如下:
  1. <code>switch(nflag)
  2. {
  3. case 1:
  4.          {
  5.                  printf("输入要加密的文字。");
  6.                  scanf("%s", scr);
  7.                
  8.                  len = strlen(scr);
  9.                  i = 0;
  10.                  
  11.                  FILE * fp;
  12.                  fp = fopen("mw.txt", "wb");

  13.                  while(len > 0)
  14.                  {
  15.                          char sencry[8];

  16.                          if(len < 8)
  17.                          {
  18.                                 strncpy(sencry , &scr[i], strlen(scr));
  19.                          }
  20.                          else
  21.                          {
  22.                                  strncpy(sencry , &scr[i], 8);
  23.                          }
  24.                          len = len - 8;

  25.                          DES(sencry , key, 1);

  26.                          fseek(fp, 0L, 2);//这个地方,老实移动不到文件尾部。而且有时会报错。
  27.                          fwrite(sencry, 8, 1, fp);

  28.                          strncpy(&dest[i], sencry , 8);

  29.                          i = i + 8;

  30.                 }
  31.                  dest[i+1] = '\0';
  32.                  printf("%s", dest);

  33.                  fclose(fp);
  34.                  break;
  35.          }
  36. case 0:
  37.          {
  38.                  char sencry[8];
  39.                  //printf("请输入密文。");
  40.                  //scanf("%s", scr);

  41.                  
  42.                  i  = 0;

  43.                  FILE* fp;
  44.                  fp = fopen("mw.txt", "r+");
  45.                  
  46.                  len = fread(scr, 8, 1, fp);

  47.                  //len = strlen(scr);
  48.                  while(len > 0)
  49.                  {
  50.                          char sencry[8];
  51.                          strncpy(sencry , &scr[i], 8);
  52.                          len = len - 8;
  53.                          
  54.                          DES(sencry , key, 0);
  55.                          
  56.                          strncpy(&dest[i], sencry , 8);
  57.                          
  58.                          i = i + 8;
  59.                  }
  60.                  dest[i+1] = '\0';
  61.                  printf("%s", dest);
  62.                  break;
  63.          }
  64. }
复制代码

总是自动覆盖以前的密文,高手给点指点啊。
虽然经常用,可为什么今天不行了啊。

[ 本帖最后由 guhan010 于 2007-1-23 12:41 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-23 12:59 |只看该作者
fseek(fp, 0L, SEEK_END);

PS:你这儿需要定位么?不是就在文件尾吗?

论坛徽章:
0
3 [报告]
发表于 2007-01-23 13:02 |只看该作者
是的。
这样写应该是在尾部追加内容,可试试上总是把以前的内容覆盖了,重新从头写了。
所以才问呢。

论坛徽章:
0
4 [报告]
发表于 2007-01-23 13:11 |只看该作者
原帖由 guhan010 于 2007-1-23 13:02 发表
是的。
这样写应该是在尾部追加内容,可试试上总是把以前的内容覆盖了,重新从头写了。
所以才问呢。

> fp = fopen("mw.txt", "wb");
由这个说明后面的定位是没有必须的啊(因为即使原来有文件,其内容也被清除了),不知道你是不是这儿弄错了?

论坛徽章:
0
5 [报告]
发表于 2007-01-23 13:11 |只看该作者
ftell一下看看fseek到文件的什么位置了。也可以看看fseek的返回值,有可能文件中有空洞。

不行还可以fopen(..."wb+");
....
然后每次从当前位置fseek 8或者小于8的那个长度。

论坛徽章:
0
6 [报告]
发表于 2007-01-23 13:13 |只看该作者
谢谢楼上诸位兄弟,我试试。

论坛徽章:
0
7 [报告]
发表于 2007-01-23 14:03 |只看该作者
是打开的时候的问题。
因为用fopen(“文件名”, “w”)打开后,文件截0了。
用fopen(“文件名” , “a”)就可以了。谢谢诸位。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP