QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |正序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
$ ]0 d, r4 e7 E. [//---------------------------------------------------------------------------: w: T' @& B' k/ s+ q

: W! G- U7 O3 |! i" m* R% o1 M! Y! D#include <vcl.h>$ _3 t. m# w1 p3 _
#pragma hdrstop
. K# s) C7 ?; R: y1 X; K; ^
# d, U- O( a+ B" \2 x6 {2 H# B#include "Unit1.h"' i3 C  d, v( ~$ ?$ U4 J& Q& j* M
#include <fstream.h>
; |( K0 p2 k: t; O9 W3 b#include <dir.h>- p! T; C7 w4 }9 r/ M
#include <sys\stat.h>
$ ?, |; s+ [" m- r; s' I" r#include <malloc.h>6 g$ a8 `+ q/ P) u) H
//---------------------------------------------------------------------------" ~: `, U5 Z) U: l
#pragma package(smart_init)3 Y7 b2 l6 l; ]4 T, s
#pragma resource "*.dfm"5 y2 q9 w$ x. [8 A: l
TForm1 *Form1;6 f0 Y% L" t) E) R( |
        unsigned char *BIN_Byte;
  c# }& J, g& L* q        long BIN_Byte_Len;
" C6 f2 i; C9 y+ h* W! P//---------------------------------------------------------------------------
# e$ k  N2 B9 i  w, N__fastcall TForm1::TForm1(TComponent* Owner)$ O, b8 s9 E) j9 U+ V
        : TForm(Owner)- I& D. G$ L& Q" l+ A+ r
{$ q: N) {3 U2 C6 V
}
. y5 |7 b4 F7 D& F+ w; G3 A! n8 X  p* r//---------------------------------------------------------------------------% h3 U; ~. a  {
void __fastcall TForm1::Button1Click(TObject *Sender)' C: F" s! M! [
{3 C4 P  ?9 [  y4 m& A; Y) a
        char sPath[MAXPATH];
5 l, O2 N5 D$ C+ F: S/ }6 X        struct stat statbuf;: I6 b1 }9 C  y5 W( E
        FILE *stream;$ ~: h/ z6 `9 V, ^

8 j( O* K/ _: ]+ \  p, y        getcwd(sPath,sizeof(sPath));3 v3 t( c( O; i: j' D& i$ Y& Y& J" ~
        OpenDialog1->InitialDir=sPath;  H2 u0 f( k' G: f0 y7 n8 Y
        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
( p/ c( P4 E" W2 J! ^% q5 t        OpenDialog1->FileName="fileFrom.BIN";
8 @+ a8 v7 f, p! x& K) b$ C. }. k. Q4 c        if(OpenDialog1->Execute()), g5 t6 h; B$ ~* a1 }
        {) A/ n. U/ H1 ]5 k
                strcpy(sPath,OpenDialog1->FileName.c_str());& g! F3 f/ H1 ]4 d/ c. c
                stream=fopen(sPath,"rb");1 i; L2 e( C* s, U+ S7 U: x9 k
                fstat(fileno(stream),&statbuf);7 R! p- w, s; S$ A
                BIN_Byte_Len=statbuf.st_size;
9 t1 e- b7 z2 z) N$ w- B                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);9 _4 g' y# O# ^4 t3 M- `; |6 y1 P
                for(int i=0;i<BIN_Byte_Len;i++)
/ [3 S  a2 s' L; [% Z                        fscanf(stream,"%c",&BIN_Byte); //read file
- i' d% p- j! F, C. ?; t& f                fclose(stream);
( @/ m+ r2 G, I        }
1 z# m4 G3 P5 G( A6 b( u! M        free(sPath);
* o* P% S7 I! Q! T' j' I3 y/ }        free(stream);' I4 U, L1 `, D7 u/ f: d1 E0 `$ b
}* x7 v! @( j. |- n
//---------------------------------------------------------------------------
* G( H: j4 O) }; @void __fastcall TForm1::Button2Click(TObject *Sender)+ h9 d; n5 \& \* \! i8 @4 X
{
# m' i( G2 i, S$ E        char sPath[MAXPATH];
5 k- f# n$ |; E        FILE *stream;  j7 ]4 }% j9 E/ Z
        getcwd(sPath,sizeof(sPath));//App.Path
2 G/ d+ f+ T2 R+ ?; _0 }        strcat(sPath,"\\");
9 a8 E! l  s! U8 T! ]0 S        SaveDialog1->InitialDir = sPath;
/ b+ V: G$ U  D  n0 F) y        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";1 C' K7 v& x+ l8 h9 k' Y
        SaveDialog1->FileName="fileTo.BIN";; R7 z$ \" i9 Y5 Q: W
        if(SaveDialog1->Execute())' E% Z" m' `0 o' Q
        {7 `- B7 t- ^! Y8 L6 C- ?
                strcpy(sPath , SaveDialog1->FileName.c_str());
5 h" G) @: h6 F% {                stream=fopen(sPath,"wb");
; ]1 I& F* h0 b                for(int i=0;i<BIN_Byte_Len;i++)
3 R5 m( z  m( L                        fprintf(stream,"%c",&BIN_Byte);  //save file3 }5 U/ K8 d  U% w1 Y+ d$ c
                fclose(stream);! K" l0 Z: o1 l6 U* |5 l) Z% ?; P  j' M
        }
- }0 Y  X/ P# d9 j! a0 N        free(sPath);/ ?; v" c, o& s: s* ~7 W7 j
        free(stream);
5 {+ W* @4 V% @' v$ d}
, u: q- x2 T% t5 N//---------------------------------------------------------------------------
) t" r4 X- b( U& T2 A6 f7 Lvoid __fastcall TForm1::FormDestroy(TObject *Sender)) M2 b9 b4 f$ n  P" I
{/ ?& Y* b" {9 T! Y1 R$ x
        free(BIN_Byte);! p' k: F2 A9 x" M+ ^8 C4 d
}
* i  c! ]5 S8 Y# y//---------------------------------------------------------------------------. j' m0 h4 G* u) X- V! R' A. ~
+ s: w; {( \- L, n
打開一個檔案,再另存為另一個新檔案+ @+ V+ S) `! }/ L3 S8 P  y$ ~1 p
結果兩個檔案內容一樣
) }# V+ o6 Q6 k+ T8 d順序不一樣了
& t( A) L/ u# b, D$ m9 u檔案前面一段內容跑到結尾去了: G% f! m8 A/ c7 V9 ?& n, x
就像下面的情況0 {5 }4 @; J' i, V* C
原來檔案內容:ABCDEFG
9 u2 l3 r7 U7 C/ G, L7 A% g新檔案內容:CDEFGAB
/ }7 A. n% }' ]' o  L老大救救小弟哦
: z: m: P3 D" s: o( [" |5 D$ u, G
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
本人方年22,学识渊博,英俊潇洒,七岁学文,九岁习武,每外出行走,常引美女回头,帅哥跳楼!
kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

high_hill        

0

主题

0

听众

19

积分

升级  14.74%

该用户从未签到

新人进步奖

<>不知道你找出的问题在那儿,我判断是alloca和malloc的误用。c++中对指针(内存)的操作总是容易出错,这些系统函数的使用,最好先仔细看看help。</P>* |1 O; U7 u2 }6 l; N9 B! }( t! A
<>alloca:</P>
2 V. D2 T5 D/ X/ G4 g: i9 U<>Allocates temporary stack space.</P>, [8 P2 [. z  ?$ m" E
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>' c1 A3 T& t5 a* Q( M
<>malloc:</P>9 }1 b/ D" X7 @3 O, F
<>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>
  }- R& u/ u  q5 L+ l( s<>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>- R7 V/ w- l; Z% @8 M- a

! w" W; D2 Y6 v! M- W<>以下是改后的代码</P>+ `6 i" x! T5 {0 r
<>//---------------------------------------------------------------------------</P>- t- m$ G0 E4 S" F, X# w* o( }
<>#include &lt;vcl.h&gt;1 {0 J  d" W( c
#pragma hdrstop</P>+ h$ D9 P; V. u3 K4 [' {' K4 n
<>#include "Unit1.h"
/ `# ~. a/ a0 X& t, N#include &lt;fstream.h&gt;; Z# q4 \4 M4 l5 U: f: O$ S1 N
#include &lt;dir.h&gt;
5 Z3 x6 k$ r: m2 m#include &lt;sys\stat.h&gt;/ D, L# ], v# A2 _
#include &lt;malloc.h&gt;1 B2 _8 g# Z% @& ?! n0 b
//---------------------------------------------------------------------------4 @. w+ e$ w' o. M
#pragma package(smart_init)
8 w5 e* u2 l% q, q" y  B#pragma resource "*.dfm"
* T' D2 ^! b; l/ t: K3 xTForm1 *Form1;
/ D* M8 {6 C, c$ ~        unsigned char *BIN_Byte;  X; N8 Z: \% A. ]
        long BIN_Byte_Len;- m4 {/ x  D, c. A/ O. M
//---------------------------------------------------------------------------
3 x1 I' t' ^  U1 `& N6 t/ D8 Q__fastcall TForm1::TForm1(TComponent* Owner)
5 t; T* z- h4 I& A+ G+ v$ }        : TForm(Owner)5 }8 z9 x0 W7 G, i' I7 ?
{! n% Q  o( m! d  |* B- y1 ^; c
}, A! J% u" u% o% o- X" Z1 ]1 |
//---------------------------------------------------------------------------
4 x" Y) c7 Z1 @; ?, Lvoid __fastcall TForm1::Button1Click(TObject *Sender), E( V; n0 O) j" T; c
{. S8 R) U$ ~2 `3 l% X% T  k! B5 T
        char sPath[MAXPATH];: V. ?* d0 m% r' C3 ]; L
        struct stat statbuf;
2 R% ?# @* _( d2 ]* O# R        FILE *stream;</P>+ o- }; W2 k1 `( f% e# {. p6 V
<>        getcwd(sPath,sizeof(sPath));
- }: E  ?0 s- t3 w+ p5 R8 P        OpenDialog1-&gt;InitialDir=sPath;. w1 J9 ]& c5 h, g
        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";" T' P2 }' \7 w
        OpenDialog1-&gt;FileName="fileFrom.BIN";
, w% }0 e3 T6 d! r* a        if(OpenDialog1-&gt;Execute())* e, S% E8 G6 G! H8 o
        {
: j% g; [1 i: i3 @                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());
. A& H8 n& ~( `$ A0 C$ c/ B                stream=fopen(sPath,"rb");
( o% u2 |' D$ U                fstat(fileno(stream),&amp;statbuf);
, a# l- @* y4 \, r% J                BIN_Byte_Len=statbuf.st_size;+ E* |$ p6 P7 ~
                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
) B' u5 E, _% o1 \; b& c                for(int i=0;i&lt;BIN_Byte_Len;i++)
' ^2 s: I- ?+ F" m9 i                        fscanf(stream,"%c",&amp;BIN_Byte); //read file
7 U: m' v" A$ A; s# T9 `2 ~                fclose(stream);7 k3 h, e. o( l8 O) ?3 y
        }6 o3 ]/ `; r; x4 I, c
}
$ E) v9 {' S) h: E! d//---------------------------------------------------------------------------6 J; _' d' z- d& d
void __fastcall TForm1::Button2Click(TObject *Sender): K# M+ e" |: J7 W8 N
{+ x  V$ {0 V6 l6 g  Y
        char sPath[MAXPATH];
2 c7 M, \- N, u. _/ X. w. @4 `        FILE *stream;7 D; @- |3 E+ `
        getcwd(sPath,sizeof(sPath));//App.Path+ R6 o4 k- E3 h- ?/ w
        strcat(sPath,"\\");9 ?3 J& n" i2 V" ?6 e5 l9 `
        SaveDialog1-&gt;InitialDir = sPath;
2 D( N1 f$ `: i: f        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
' b6 V0 Y, J; y6 V$ m        SaveDialog1-&gt;FileName="fileTo.BIN";
" H0 j3 M4 E- G) f        if(SaveDialog1-&gt;Execute())# p) @5 j  _7 W2 _/ x3 ]
        {) \6 j, ~' p- I
                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());0 M# [# U; J& v: s
                stream=fopen(sPath,"wb");' p& u% B6 M9 y  I% U/ C
                for(int i=0;i&lt;BIN_Byte_Len;i++): C( `: H3 p0 h7 B, O# X7 d
                        fprintf(stream,"%c",BIN_Byte);  //save file# l' m% a$ x* L8 S9 G
                fclose(stream);. c( y% W3 I* u4 H7 i5 ?
        }2 `: k$ u5 Z% M# o7 O0 G% l
        free(BIN_Byte);5 o2 J' s8 U$ _( h6 S/ `
}8 U4 k3 q  z5 z$ |+ A' y
//---------------------------------------------------------------------------
' u9 I& N- M) a! v0 \$ s- O. qvoid __fastcall TForm1::FormDestroy(TObject *Sender)& Z) m  v- R- U$ x/ l- }1 I: c2 L
{. @  e$ A. T" [' }* X/ n6 {6 c
        if (BIN_Byte!=NULL)
( C% r: i/ ]& O0 N$ w, V             free(BIN_Byte);( ~% U1 u# Z- x
}5 ~% ^! h7 U9 H5 E* c
//---------------------------------------------------------------------------$ B7 P/ b0 \9 \; t
</P>
6 J' H4 P, O, h$ G' A<>free(sPath); free(stream);此两句也有问题。</P>3 p5 D& e3 H3 T" ]- d
<>char sPath[MAXPATH];不需要释放;</P>
7 R$ b. q- P; Y& `  S7 h/ D7 |3 D: o<>fclose(stream)已经起到free(stream)的作用</P>
0 B6 ~4 q, X+ H
[此贴子已经被作者于2004-6-15 15:16:40编辑过]
回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

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 11:45 , Processed in 0.534954 second(s), 82 queries .

回顶部