QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2426|回复: 5
打印 上一主题 下一主题

老大,簡單的文件操作程序,不知道錯在那裡!救命阿

[复制链接]
字体大小: 正常 放大
kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
  f% ?' t& e  K0 F//---------------------------------------------------------------------------
2 `" g! W/ q: ^) }
( u+ T2 Z" S; m( I$ C#include <vcl.h>) D: O. L, g, z6 s" V1 Z( [1 B( p2 F  L. ^
#pragma hdrstop
5 _1 Q$ n" o+ [) j; I4 y
+ O! a; R" U5 o2 M4 Y, M8 F#include "Unit1.h"
/ J7 f* @7 K, `8 e2 ^+ T0 @#include <fstream.h>
1 [6 R- n; d6 l1 `#include <dir.h>
$ e6 @3 B) a( ]" T8 G* {#include <sys\stat.h># z1 R4 _2 ^5 S' |$ @
#include <malloc.h>5 Y! E% K& H0 w1 l$ A, V; [
//---------------------------------------------------------------------------
4 Z1 X( @  [) D" W* J& I#pragma package(smart_init)
  G4 c% u+ W! N% H6 i0 l1 D" _#pragma resource "*.dfm"& U2 p  T1 m# D$ U/ G8 p- d8 @8 i: }
TForm1 *Form1;
: @! A$ G- u7 V- {        unsigned char *BIN_Byte;
" A: O9 K2 B( }4 ~7 J        long BIN_Byte_Len;6 u+ ]! ?( d" ?, O9 G
//---------------------------------------------------------------------------7 ^0 J  B* F$ N# w- p
__fastcall TForm1::TForm1(TComponent* Owner)5 x  C0 V0 E5 A* L: n, D' [
        : TForm(Owner). R; ^2 t! [4 l& ?/ Y. |
{- z. Q" b4 U: X4 d" g9 a
}9 f5 R  [* X- d8 ~9 \3 C) s
//---------------------------------------------------------------------------/ V( l$ O! l/ z9 P
void __fastcall TForm1::Button1Click(TObject *Sender)# Q( y" y. ?% x; R
{
: F' S; ^. y- O' Y        char sPath[MAXPATH];; {" ~0 j* s" V0 G' ~2 ]4 f
        struct stat statbuf;% w3 X9 m" w, }, W6 z4 M
        FILE *stream;
: S- d7 a! u. d# w" p
2 |! J8 G9 A# R0 E) X9 }& `8 Y        getcwd(sPath,sizeof(sPath));9 \# C0 R- ^8 D: B
        OpenDialog1->InitialDir=sPath;
$ k! y9 v, p% \$ F  {" m, [& ^' ^        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
2 \. z# Q+ [$ d) o, r- ~        OpenDialog1->FileName="fileFrom.BIN";
" k/ ~) b8 a3 e( v        if(OpenDialog1->Execute())
! L6 `9 d3 }) `6 n1 L/ u        {
; e3 o0 X( J" y3 t1 R& d                strcpy(sPath,OpenDialog1->FileName.c_str());: l& l) ]4 S) v' s! D$ s3 n
                stream=fopen(sPath,"rb");% i& F3 m) S6 {
                fstat(fileno(stream),&statbuf);
1 n: ^4 F) F' U) ?% z0 z                BIN_Byte_Len=statbuf.st_size;
! O" z/ p6 e3 J% {0 l                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);. w- S1 F8 l2 z5 ?4 [
                for(int i=0;i<BIN_Byte_Len;i++)
4 m# E2 u5 v/ P1 }                        fscanf(stream,"%c",&BIN_Byte); //read file
9 k/ ]6 M$ Y- J7 e                fclose(stream);: x: V* j7 q7 ?
        }' w* F$ k7 t: L! I* ?
        free(sPath);, w) u! P* r1 Q
        free(stream);
  m2 z4 p( t/ O' V- ?7 V  w' H}, ?+ R7 y; _9 E5 C5 h" ~3 Z
//---------------------------------------------------------------------------
, Y' K9 F& H( N7 evoid __fastcall TForm1::Button2Click(TObject *Sender)2 P! h4 F' L: {: F) @' l
{
  _& M3 Y$ [( h# _8 R; R0 {        char sPath[MAXPATH];; K5 t3 E, D( D/ ?: p
        FILE *stream;% y2 {- n+ i: o( U$ h* U8 G5 m
        getcwd(sPath,sizeof(sPath));//App.Path. X* A3 I4 C3 H7 G
        strcat(sPath,"\\");
# J% [" N2 B, H- q% v6 N        SaveDialog1->InitialDir = sPath;( s3 m5 H) Y" z) `2 S
        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";9 d; o7 i4 f  i7 \5 G  r' n) I0 y% F
        SaveDialog1->FileName="fileTo.BIN";
7 n  s+ s3 s$ l- B; d+ f! d        if(SaveDialog1->Execute())
1 E, j% p* X( G0 m& l        {
! _, `8 D* U( a$ f8 R, p                strcpy(sPath , SaveDialog1->FileName.c_str());
$ O7 i# u( t0 Q. Q9 I                stream=fopen(sPath,"wb");
' ~$ e: {- k" }8 t  ]8 E8 X' y                for(int i=0;i<BIN_Byte_Len;i++)! L$ n: D! R' h1 x6 b
                        fprintf(stream,"%c",&BIN_Byte);  //save file; k1 {& J+ I2 ]) c( G  Z9 p8 u( k5 A1 A
                fclose(stream);
4 y3 B* _( e2 o" n, [4 a        }
6 k: [' U. ^  U( F$ T        free(sPath);! H0 f3 j* p0 ^8 Q
        free(stream);
9 R. K2 ~1 k8 m' q! d6 J}
4 t4 r  P$ M8 B( j' X) |# L; E//---------------------------------------------------------------------------1 T7 x% Y- c8 J1 n" X+ f7 d9 V$ N3 k/ Z
void __fastcall TForm1::FormDestroy(TObject *Sender)* ]0 [; C4 f+ }$ T
{
+ c! x6 k% e' t  J* k) U        free(BIN_Byte);
% S! Q! O# M% [, |$ h; f" X+ W}# B/ a3 B4 R% M+ [# N2 {
//---------------------------------------------------------------------------
+ G3 l, K: p  X* T' W' _7 i+ v1 l4 G3 C! A
打開一個檔案,再另存為另一個新檔案9 d$ ~) e' t+ k1 a6 W) q
結果兩個檔案內容一樣
  R1 E; Y* N' L1 N) N% D% k4 i( B& Z順序不一樣了
9 c5 p9 S2 d6 s8 n9 w6 J- w檔案前面一段內容跑到結尾去了
; O5 Z1 A/ m1 Z就像下面的情況
# }" K8 ^3 e, L8 Y% l  c1 Y3 U原來檔案內容:ABCDEFG
, }6 H# p! Q/ n+ X3 q6 b* E新檔案內容:CDEFGAB
7 h/ A6 A9 @" h& k, s& p4 N老大救救小弟哦3 z: Z9 D2 q0 y  o! H
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
本人方年22,学识渊博,英俊潇洒,七岁学文,九岁习武,每外出行走,常引美女回头,帅哥跳楼!
kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

high_hill        

0

主题

0

听众

19

积分

升级  14.74%

该用户从未签到

新人进步奖

<>不知道你找出的问题在那儿,我判断是alloca和malloc的误用。c++中对指针(内存)的操作总是容易出错,这些系统函数的使用,最好先仔细看看help。</P>) o5 y/ m+ }4 `! ]. K' t& f5 X
<>alloca:</P>
& i% ]% M- ^2 j3 `6 i) j; A<>Allocates temporary stack space.</P>3 n5 D4 X1 P( H/ Z  Q, p
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>0 a, W" [6 N" _
<>malloc:</P>
8 N) E: O8 k" S" P, ~<>malloc allocates a block of size bytes from the memory heap. It allows a program to allocate memory explicitly as it抯 needed, and in the exact amounts needed.</P>
( c' t  F$ `/ F6 q% v2 ?<>Allocates main memory.The heap is used for dynamic allocation of variable-sized blocks of memory. Many data structures, for example, trees and lists, naturally employ heap memory allocation.</P>; O% l' _' m: S  Y$ Q

6 ]1 H* O! B4 J( ^5 W" Z, V7 q$ |<>以下是改后的代码</P>
) r' `% V/ }! u4 ^; V$ R) H<>//---------------------------------------------------------------------------</P>& i% [: Q" T$ G$ b% c. V' l- V7 k
<>#include &lt;vcl.h&gt;3 K& D, ^# Y+ X& I
#pragma hdrstop</P>
/ Z( I* J4 Y, M% v* h9 I) O( ?/ W<>#include "Unit1.h"
$ U. u: F* _; b0 e* f#include &lt;fstream.h&gt;
9 @8 x7 P( P! m* |4 ^#include &lt;dir.h&gt;
) _, S8 v6 K: F* O; M' N2 \0 H$ k#include &lt;sys\stat.h&gt;& }1 }: y) H( t
#include &lt;malloc.h&gt;
: G, I2 j1 ^% j( o- I//---------------------------------------------------------------------------
% e( j7 A$ w0 s, S% ^#pragma package(smart_init)
3 z1 Y& F! X" z$ O* j7 J. n7 G#pragma resource "*.dfm"7 D; U! I( O5 G) u0 @
TForm1 *Form1;
* c# m! n3 s2 g2 N, @& N% {        unsigned char *BIN_Byte;
' l$ l. l- K' M        long BIN_Byte_Len;
" H5 R, ~9 L6 ~: q4 A  \  d//---------------------------------------------------------------------------
9 T$ U& z( o! ]- q__fastcall TForm1::TForm1(TComponent* Owner). h3 l' s8 o( ]( H$ s, ?/ v
        : TForm(Owner)4 x5 j/ ?) W% {
{0 q% g6 G; z0 @: s
}
) L+ ~: h6 W4 ?. P//---------------------------------------------------------------------------8 y- r( |7 f. I$ G3 o
void __fastcall TForm1::Button1Click(TObject *Sender)( R+ `, t9 {6 K
{% U* R) F3 L$ F( ?, A
        char sPath[MAXPATH];8 ^/ k* _) t3 B, X7 Z; u3 ?  v
        struct stat statbuf;, C5 q/ j# I" k1 i
        FILE *stream;</P>9 X, o" C2 Y$ n) A( ^( ]
<>        getcwd(sPath,sizeof(sPath));& u; W) W  I( O: ^
        OpenDialog1-&gt;InitialDir=sPath;
( P5 P/ Z( H7 K4 |6 d        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
* n; B5 r+ _1 p7 H$ t        OpenDialog1-&gt;FileName="fileFrom.BIN";
# [6 g2 r+ t) ^/ I. u( |7 K        if(OpenDialog1-&gt;Execute())* D( I7 c  E1 E" H3 R7 P
        {9 x6 b- |& X: [3 X
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());& E4 M7 I8 o6 Q! c) f
                stream=fopen(sPath,"rb");
3 u% J! o0 f9 z: n                fstat(fileno(stream),&amp;statbuf);& V4 n9 a+ e2 @
                BIN_Byte_Len=statbuf.st_size;
8 \* C7 N. L2 I- N+ G- j                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
- l2 P" T' b! \( L5 f" c                for(int i=0;i&lt;BIN_Byte_Len;i++)0 T( {3 D$ O: L8 ^8 @9 g
                        fscanf(stream,"%c",&amp;BIN_Byte); //read file! K; }! |' |- [+ X! s
                fclose(stream);* O% ~5 @- E4 ?: G" K) e
        }! i& w6 ~6 r$ B7 M  h
}7 q: k" y. _8 X  `
//---------------------------------------------------------------------------* C. N' _8 }, ~; W4 J
void __fastcall TForm1::Button2Click(TObject *Sender)/ M" J6 k' q2 z
{6 A  Q- k) m$ N  M3 i
        char sPath[MAXPATH];  f4 e; ^* p& L2 f0 ^
        FILE *stream;& y6 c4 t* @  K) V
        getcwd(sPath,sizeof(sPath));//App.Path
3 U3 P; h. K0 G6 W2 Y        strcat(sPath,"\\");
+ R" v; E# q' E5 w+ M# ]        SaveDialog1-&gt;InitialDir = sPath;
1 T) ~  A+ A5 j! J; V# {- ]- t        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
! a$ X, t- i2 R3 k. c/ M        SaveDialog1-&gt;FileName="fileTo.BIN";: i+ [- U. b% B7 @: J
        if(SaveDialog1-&gt;Execute())
& ?7 }# X: a3 Y( R4 c        {) P$ ]9 Q& y$ V
                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());
- s5 p- S  Z; x* _  }9 e                stream=fopen(sPath,"wb");
! j) J( i, q0 q+ q. l                for(int i=0;i&lt;BIN_Byte_Len;i++)
/ m* h% i9 R2 l! Y8 A5 I                        fprintf(stream,"%c",BIN_Byte);  //save file
2 U1 e/ x$ Y9 t. q2 |                fclose(stream);
  h" e4 r6 [% G! o& A1 n        }: A$ V: |" L! ~3 n' M
        free(BIN_Byte);. v+ E3 A) Q2 s. p* X8 o- V' \0 S/ O  u
}
: d* x. b% \+ \$ z/ {7 p//---------------------------------------------------------------------------/ i' L! |: L7 Y
void __fastcall TForm1::FormDestroy(TObject *Sender)
% h. I: Q! B$ B4 n3 Z# ^+ \{
- e! h) [3 B2 T) v        if (BIN_Byte!=NULL)
1 z. @" g9 t) S  ?2 q0 W1 d) |4 g) c             free(BIN_Byte);
0 ]  U& t- J) l6 Q; S: A}
% z; G: ?, X* c' I0 `//---------------------------------------------------------------------------, k% |# _* R6 z5 h1 {& I' p
</P>8 y2 v0 N0 J" B& c3 ]
<>free(sPath); free(stream);此两句也有问题。</P>3 `& }/ _$ N; x  k3 N
<>char sPath[MAXPATH];不需要释放;</P>, ]$ B! Z% \' Q  S, a
<>fclose(stream)已经起到free(stream)的作用</P>
3 f$ L5 a  L; c4 {1 @0 f3 L
[此贴子已经被作者于2004-6-15 15:16:40编辑过]
回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 09:56 , Processed in 0.483393 second(s), 83 queries .

回顶部