QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
- I$ M6 L4 a' J0 z6 O//---------------------------------------------------------------------------
2 k8 E8 A7 J0 {1 f8 F5 f: p/ z" @" C( V5 Q" `+ i
#include <vcl.h>
7 Z9 h% O3 @4 o9 G#pragma hdrstop8 S6 t6 f) L0 ?) q! L! I

5 t% c9 V6 e7 v8 z+ ~+ N  X#include "Unit1.h"* @2 b' l) S8 g, t; Y
#include <fstream.h>& x3 q& U- }& o# d: x
#include <dir.h>
8 G4 @& L; R! |1 z& x: N0 U#include <sys\stat.h>! W" o- ], \) d
#include <malloc.h>! b6 b8 v& k( t1 `1 d8 L
//---------------------------------------------------------------------------
8 a; j# C2 z5 }' K#pragma package(smart_init)8 s- _$ k; Z6 Z6 d0 Q* }
#pragma resource "*.dfm"
) b5 K3 D4 K% p" t4 PTForm1 *Form1;  ^7 ?# l1 T$ p$ X
        unsigned char *BIN_Byte;" u, r. B$ ^5 c( x3 s/ h
        long BIN_Byte_Len;
6 v0 n" G. x" O0 L4 D# j//---------------------------------------------------------------------------* [& T- h/ z* u* N/ ~- k( B
__fastcall TForm1::TForm1(TComponent* Owner)
, V" F/ c5 k/ A0 c        : TForm(Owner)
! v; C, ~: _. T4 G" l; Q0 l{7 o6 I) m% \( N1 ?
}
; }6 n+ v, o3 f/ ~" H//---------------------------------------------------------------------------1 a; g) H2 ]1 z/ |6 H: N% M
void __fastcall TForm1::Button1Click(TObject *Sender)
- s5 y+ l8 u  y- X2 a{! O6 Z3 g/ ]# }: z
        char sPath[MAXPATH];
. _" N" @( W) L+ Q; _1 n        struct stat statbuf;3 ~: D" q# B& g  I8 |. U
        FILE *stream;, Q! r8 w* x& a- ?

$ y4 }, Q' F5 \0 Y$ u        getcwd(sPath,sizeof(sPath));7 i- r. f* |( c) m2 m
        OpenDialog1->InitialDir=sPath;2 @; t3 L# O6 Q2 U# X" Z' S
        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";6 r2 ]# O) f5 s6 T
        OpenDialog1->FileName="fileFrom.BIN";) k1 u( A9 V0 [' F( v. D; }% V
        if(OpenDialog1->Execute())" g" c  C' j* b5 `: D
        {1 H# t# ?( f1 ]
                strcpy(sPath,OpenDialog1->FileName.c_str());- b- T7 D% R2 Q+ S+ H& I1 o
                stream=fopen(sPath,"rb");2 }$ Q7 s# M" l, R7 U
                fstat(fileno(stream),&statbuf);0 C- \$ t+ U" c; Z
                BIN_Byte_Len=statbuf.st_size;6 l" ^( E/ c, u6 i
                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);  H9 Y. t& b4 N  I
                for(int i=0;i<BIN_Byte_Len;i++)" l  n1 |( l; O$ `  T
                        fscanf(stream,"%c",&BIN_Byte); //read file
4 [4 |  @. W$ j) y9 A1 T                fclose(stream);
3 O0 J' H# m0 i, w/ M0 O% J8 }8 e        }1 l1 `, J9 {& p: [' ?& X
        free(sPath);
( `* w, G7 u; U0 v" A! j) M        free(stream);
& A0 t) @, \  N! A; ^9 T' w3 D}
) X8 v5 ?* C5 w//---------------------------------------------------------------------------
! b5 S5 k' l4 ?/ x' H( }void __fastcall TForm1::Button2Click(TObject *Sender)+ b1 q6 N$ \4 M4 I/ u0 O+ C* ^
{
& x" G" N4 F0 V( R# l7 ?; G        char sPath[MAXPATH];
/ U/ Z# m: s* `. Z7 s        FILE *stream;" P; M2 _6 u1 O1 T. r* ]# M
        getcwd(sPath,sizeof(sPath));//App.Path3 q" ]; e8 I8 \3 Z
        strcat(sPath,"\\");
. a' Q9 c; w" E$ I1 w9 Z        SaveDialog1->InitialDir = sPath;" Z' Z! C" p! g- |+ W
        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";! Q1 D) W& w, p
        SaveDialog1->FileName="fileTo.BIN";
6 b9 V# x0 {4 B; \        if(SaveDialog1->Execute())
% `3 C& x4 h8 a7 Q% V2 L5 p        {  Y. U  i2 _+ N( I6 v: c# c
                strcpy(sPath , SaveDialog1->FileName.c_str());; k8 t0 X/ |% t  _
                stream=fopen(sPath,"wb");
) W. [5 I+ x; ~; r: k                for(int i=0;i<BIN_Byte_Len;i++)
' v! a# t, ~$ x                        fprintf(stream,"%c",&BIN_Byte);  //save file; l$ w9 k# S% u& h5 ~( x
                fclose(stream);( b) U6 ]* T  D( F5 n- ~
        }
9 ^' M/ o8 Q5 x# r# E        free(sPath);5 O0 t( S! C. K. W9 ?; `% L/ u
        free(stream);3 A: x' v7 m# O) D
}
( I4 H" L2 M% K' [0 H//---------------------------------------------------------------------------$ u! ?% J3 t( @/ w
void __fastcall TForm1::FormDestroy(TObject *Sender)
/ D, z2 f  }# h' l2 r1 P6 `: [{4 H* i8 }6 Q4 Z9 v
        free(BIN_Byte);
2 u9 \/ v3 |" c+ `0 K+ n3 Y& S: E0 \4 n}7 s  u* d0 I% x  M! X! i, c
//---------------------------------------------------------------------------
; ]6 a5 M% q  Q( j, }( R8 ?6 U, S$ o8 e6 Z( m6 h* ?( Z" R
打開一個檔案,再另存為另一個新檔案
) A! X/ M. o0 n, @, Q結果兩個檔案內容一樣
# q3 u/ i5 F" M% P# v; C順序不一樣了
& E. d6 i! e' M檔案前面一段內容跑到結尾去了
. S2 K; \0 z; `/ ^' E就像下面的情況: X! P2 q; n+ ]- d+ i
原來檔案內容:ABCDEFG
* w' G: l  e+ \3 j; f2 F新檔案內容:CDEFGAB
# @6 l% i3 F* |8 v老大救救小弟哦
0 m/ c8 v) @! M- k1 y4 N# z
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>
& j7 e4 V% d, ~6 ]<>alloca:</P>
7 I. q0 Z7 i: }2 I+ {6 Y  u$ T<>Allocates temporary stack space.</P>
% E. ~2 E8 ^2 l<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>3 ~- h. [* z& ?! e/ S
<>malloc:</P>
. G' X9 `& x/ n% \! b' c8 `<>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>4 f/ l- U. v# @; D" U' ?0 A" h
<>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>5 t/ ], r% _: X( b" g4 @! X

. W. \: B: L, Z( `% D<>以下是改后的代码</P>" a" R& ]/ `# a7 A  K
<>//---------------------------------------------------------------------------</P>& d' N9 w2 G$ k  ]) G
<>#include &lt;vcl.h&gt;" u" G1 y0 X5 P2 \
#pragma hdrstop</P>! Q/ I, p: ]; \, h0 |
<>#include "Unit1.h"% G0 @9 x7 V/ o1 j! M9 B
#include &lt;fstream.h&gt;
$ v* [- g* N" ?* f  B. H#include &lt;dir.h&gt;8 S# s2 S( P! u! o- O
#include &lt;sys\stat.h&gt;
& Q  V; t. T9 P$ ^#include &lt;malloc.h&gt;' T, B$ ]" J$ F
//---------------------------------------------------------------------------; w% U2 C9 r3 k6 ^& B. p  S9 \
#pragma package(smart_init)
$ {2 {  J/ _5 G0 @2 u" |; h#pragma resource "*.dfm"% [5 Q$ q9 |& s1 B
TForm1 *Form1;8 N& L2 k9 X/ i* d+ s$ ?/ _
        unsigned char *BIN_Byte;" g7 E# D7 E" h2 [) s
        long BIN_Byte_Len;$ E% V; I" P& y( P) r& u
//---------------------------------------------------------------------------( ?1 Q7 Y+ V$ m( u) Z9 W
__fastcall TForm1::TForm1(TComponent* Owner)+ i, R# S4 |: \' {
        : TForm(Owner)
" T8 k1 z% x/ I7 w( s{! j9 L, Q3 b  F* k, \
}
& j/ E- N. W% M- `& L//---------------------------------------------------------------------------' q- v9 L0 b" c, X! O" c" u( d
void __fastcall TForm1::Button1Click(TObject *Sender)
" J1 c- I; H- e2 B6 Y{; q4 ]$ I- o+ u4 t$ F% k
        char sPath[MAXPATH];+ H: N  d9 f; J4 L% z0 g
        struct stat statbuf;/ J& L" \: \3 b( f8 F# J8 `+ X
        FILE *stream;</P>, x7 O7 V* e/ T
<>        getcwd(sPath,sizeof(sPath));
' P1 }1 a& x  \/ r6 C  z) \( _        OpenDialog1-&gt;InitialDir=sPath;
* I  P' a& M$ Y4 A1 l/ r% _- V        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";0 q3 l( x" I+ E
        OpenDialog1-&gt;FileName="fileFrom.BIN";
" r4 }, z1 H5 l        if(OpenDialog1-&gt;Execute())' d. n. ]6 T2 ]7 Q5 E. Y5 @
        {, X+ j, Z0 A" P6 B* f' p4 K
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());
, X: R- O+ T3 u  c1 Q9 t                stream=fopen(sPath,"rb");
9 y8 Z9 p; S& f" x8 H+ p/ o                fstat(fileno(stream),&amp;statbuf);$ i6 S6 i; V3 l& d8 K
                BIN_Byte_Len=statbuf.st_size;
8 n4 g) R3 S% k! l                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
# C$ a# g5 Z- W; Z5 U2 `6 a1 O                for(int i=0;i&lt;BIN_Byte_Len;i++)$ G$ ]2 ^% I! {. L3 A
                        fscanf(stream,"%c",&amp;BIN_Byte); //read file: v( \# E4 s# W: i
                fclose(stream);  E8 Y0 j7 a" ?& }8 n
        }# q5 o( M0 F0 ]6 t" i
}
/ \6 z' R. u# h% n  _" T: Y//---------------------------------------------------------------------------3 i7 f/ u& `6 c' m+ L! M
void __fastcall TForm1::Button2Click(TObject *Sender)9 _5 ?0 a. P9 C* }
{, q9 M+ q+ O) `4 y. y% S1 v
        char sPath[MAXPATH];4 _; Z$ i% m! W+ w8 ]2 E/ C
        FILE *stream;
3 H* u* O8 ~( Y' Z        getcwd(sPath,sizeof(sPath));//App.Path
  j( Y  {1 S0 l3 g5 @$ K        strcat(sPath,"\\");
: T& ]8 q8 c9 ]8 D, p# d3 D3 _        SaveDialog1-&gt;InitialDir = sPath;
8 ]9 `9 o" K, A- \. w! r( R        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
( t% F6 z3 }8 |" n+ R        SaveDialog1-&gt;FileName="fileTo.BIN";  e' G8 T. |7 R* ?, Z+ A5 o
        if(SaveDialog1-&gt;Execute())
: t5 s$ F" s7 p0 n, B% I' c: T        {
- ~( S; p. M; c                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());
& F7 {& d/ [5 V% ^                stream=fopen(sPath,"wb");6 \4 ~" E3 O/ O3 P
                for(int i=0;i&lt;BIN_Byte_Len;i++)+ q" c, u8 T1 z; ]4 I
                        fprintf(stream,"%c",BIN_Byte);  //save file% Z0 v- B+ G+ y, J
                fclose(stream);
7 u+ _3 O& }9 _7 C; T0 k        }
( H' |+ E  z% H  a        free(BIN_Byte);/ }6 y/ |* \) k" q
}* B3 g: [, m, D1 Z5 k
//---------------------------------------------------------------------------! ~: ]( i% Z" a6 f) U* y
void __fastcall TForm1::FormDestroy(TObject *Sender)+ |" d/ P+ `4 P% U
{
6 G& o- v" k3 X; x% O        if (BIN_Byte!=NULL)
- R* G# D9 }9 A             free(BIN_Byte);4 X$ N! _- I1 ?7 h  p# T# `" ]
}
! U! V  T( a  _3 D! Y//---------------------------------------------------------------------------
% ~; b8 U* I$ l5 I  O9 k</P>
. p, Q2 u$ G# \8 T( s* N  j<>free(sPath); free(stream);此两句也有问题。</P>; e, ~# u4 z8 b- X0 U( ^* s% x
<>char sPath[MAXPATH];不需要释放;</P>
2 U! }' a) }$ z( k* T<>fclose(stream)已经起到free(stream)的作用</P>/ ^7 c: [( k' g1 X1 T
[此贴子已经被作者于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-7-21 02:48 , Processed in 0.792502 second(s), 83 queries .

回顶部