QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
3 _0 _' ]4 W+ n; |6 T" l//---------------------------------------------------------------------------
5 O& h9 Z% T0 H4 T3 J: J2 ^
; W" `, r- [; ?! m4 v#include <vcl.h>
; j4 B! D( _1 ~$ T1 U  f4 T#pragma hdrstop
/ D/ G* x* ?" G1 \5 u9 y
4 ]1 \4 {. v8 v( _#include "Unit1.h"
+ I; T5 x* U$ T4 w& N6 E#include <fstream.h>  b  M3 T( W; ?2 g
#include <dir.h>
- H0 G; l$ B2 O0 ?4 U6 W#include <sys\stat.h>/ ^4 y; u1 a" S& }
#include <malloc.h>/ D) I4 Y9 i4 g' a/ S
//---------------------------------------------------------------------------: r/ F( k- \8 ?0 k5 v9 c5 ~
#pragma package(smart_init)
$ R1 d6 W4 }! \6 s5 G#pragma resource "*.dfm"
0 B) \( L& X: p# U2 NTForm1 *Form1;, Z7 f) T1 T0 b, |  ~! Q; L
        unsigned char *BIN_Byte;
# T* x; ?% y* p        long BIN_Byte_Len;
) f, \& {# t1 o, Q+ C. n% C//---------------------------------------------------------------------------# L3 [7 [! W8 k. Q! g
__fastcall TForm1::TForm1(TComponent* Owner)
& K# B8 L' x. v- }& e) g        : TForm(Owner)
5 k+ @$ N% S& D{8 m8 S+ ?3 N5 n. ?8 \
}
- t/ B3 r2 |) _1 R: q# D//---------------------------------------------------------------------------
- n. h6 i4 g! _3 w  D8 evoid __fastcall TForm1::Button1Click(TObject *Sender)
& U2 ^0 }* G, w$ }* B9 g2 R! L: ~{8 H6 j3 p! `/ o3 ?; b6 I' U, ~
        char sPath[MAXPATH];
2 d% G5 }+ U. r6 v/ B4 y* V        struct stat statbuf;
# B: Y' z: P* X7 G, P7 `' P        FILE *stream;
/ o7 D, Y, @. f5 K% x; T1 G8 D% h4 P7 Y; u
        getcwd(sPath,sizeof(sPath));- e" {1 ~6 c$ g, ?6 [; ~, @. ?
        OpenDialog1->InitialDir=sPath;+ I# z+ ^* v* M- f9 I* l: u
        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
. J& Z! w6 E& y. q6 \        OpenDialog1->FileName="fileFrom.BIN";" C+ o3 u  I7 Z# `% x7 ?! J
        if(OpenDialog1->Execute())3 J9 i; S. _/ K) @
        {
# B! L1 l4 `* k# _( _! T! {# m6 F                strcpy(sPath,OpenDialog1->FileName.c_str());, D5 e, l) c) x. `( W& m" h) k
                stream=fopen(sPath,"rb");
" x% n% E0 ^$ F: ~                fstat(fileno(stream),&statbuf);, ^$ b- c* C* m
                BIN_Byte_Len=statbuf.st_size;5 C1 C5 u9 D" t0 R' }1 \
                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);: }9 U' `4 [) m6 z: J& L1 y
                for(int i=0;i<BIN_Byte_Len;i++)0 j# t; V: E) o6 H& ~; M( ]
                        fscanf(stream,"%c",&BIN_Byte); //read file
' O' V" F  k. p; M' n5 _                fclose(stream);
8 K# }( M5 _9 m8 D, |5 r' a0 \. m        }/ i0 U4 o" I* A5 [+ h
        free(sPath);
6 v* g6 D% H& F        free(stream);# w1 P! [. {$ b) T
}
; ?  n; ~, W/ ^! O2 g  ?//---------------------------------------------------------------------------
6 _( \9 r- \+ n+ J4 M' vvoid __fastcall TForm1::Button2Click(TObject *Sender)
5 v  A5 {9 Q* k{
# @$ b% a# J( N: e9 a0 G# g( u        char sPath[MAXPATH];
3 X3 q# ]: K1 j: `4 G        FILE *stream;
! I+ j1 K0 O- I2 N8 U        getcwd(sPath,sizeof(sPath));//App.Path% R+ T/ B9 X& f- q$ n. P0 b! L
        strcat(sPath,"\\");
) i$ i! R& K+ d" ]7 y3 g+ ^  f/ [7 r        SaveDialog1->InitialDir = sPath;- c2 l' S$ n( d" g; Q( v8 W# Q
        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";2 H0 ~" p/ p8 S/ X
        SaveDialog1->FileName="fileTo.BIN";1 V6 l1 P# |5 T9 b: B
        if(SaveDialog1->Execute()); I  s9 [' v* u; D; w
        {( q. e, {4 h3 W; ~# P6 e
                strcpy(sPath , SaveDialog1->FileName.c_str());( X: `, M% P  B) A! s2 G% I0 |$ W
                stream=fopen(sPath,"wb");+ p) e/ R  c. [7 ~( D
                for(int i=0;i<BIN_Byte_Len;i++)) g3 N6 E" c+ E' ~
                        fprintf(stream,"%c",&BIN_Byte);  //save file
; z% R0 D. }$ G4 f, T/ Y' L2 g                fclose(stream);5 e5 q, x+ h+ d6 z. O
        }
2 R2 u( x& g7 ?! n# o; b) d! w6 r        free(sPath);
9 V- p2 k/ }" m- F+ R, ]: h        free(stream);6 T+ Y- x  i7 G0 f
}& L. U% O+ \3 A5 D6 H) l& ], @- |4 [
//---------------------------------------------------------------------------5 x% i" |6 G) i# b
void __fastcall TForm1::FormDestroy(TObject *Sender)
/ @# _" z4 I  a{
5 H1 x, z6 E, T, Z9 m( k, Z6 s' y        free(BIN_Byte);/ k: B/ _8 O. d( r# L
}
5 x7 ]8 A3 R+ h//---------------------------------------------------------------------------
$ [$ R' U  T3 d9 h+ N0 a/ A: r( l; B3 j' v. \" g6 }% [6 Y5 f
打開一個檔案,再另存為另一個新檔案
' G4 A5 f- }5 I! _/ ~結果兩個檔案內容一樣  p  A9 ^; }: h) N+ ^/ Q2 f6 A7 A
順序不一樣了
1 S4 Q9 F4 I# @7 t, H檔案前面一段內容跑到結尾去了
- k/ G/ P# g: q就像下面的情況2 z# K+ c% z5 }% l' z
原來檔案內容:ABCDEFG4 [4 q3 D0 @  w; n* S5 f
新檔案內容:CDEFGAB+ o' Q  ]' G7 Y! E7 D$ ~6 S! N/ _
老大救救小弟哦
5 G8 T+ B) E$ m* v% {' o: a( 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>
7 g. |$ Z" T! g. y$ Z, i* j  K<>alloca:</P>
; n; N# K" u5 R( ~7 O! L" `' [1 S$ z' M<>Allocates temporary stack space.</P>
$ S- S! i  e4 j# k, d9 t<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
8 S8 o, q; v  O3 m8 @+ ^<>malloc:</P>9 e# |# v0 H4 |2 a
<>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>& z# N/ U, t0 {5 \- o* s- e1 p
<>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; N3 }) M8 g! Q& O! N$ h* f* }3 J
<>以下是改后的代码</P>
0 q6 ^6 P3 H! P# X- [<>//---------------------------------------------------------------------------</P>
) L2 D9 t" O  ?: s9 f; T<>#include &lt;vcl.h&gt;/ J; v9 @, c$ o" `3 j- \1 M. r
#pragma hdrstop</P>* B! k, f9 ?- `, ?9 Y! g( @6 b% S! b
<>#include "Unit1.h"
7 N4 d0 l7 A3 s" l) l7 r. z. {#include &lt;fstream.h&gt;
7 W: h1 [4 o/ k7 i#include &lt;dir.h&gt;- X/ D1 y, S% _* W$ z7 R
#include &lt;sys\stat.h&gt;8 j4 f- O5 z; x  F# E
#include &lt;malloc.h&gt;+ I. e0 M) ^9 i+ g- K
//---------------------------------------------------------------------------
3 C) [8 S$ Z- s- q0 ?7 y#pragma package(smart_init)  v8 v& T. t& h. q
#pragma resource "*.dfm"
! e# ]& _2 l& N0 y; G* @TForm1 *Form1;, o# |1 r4 F! Z1 t7 u% B
        unsigned char *BIN_Byte;
+ D+ }% a, s$ l  z/ o# `        long BIN_Byte_Len;: G- F6 q( h+ ?! f9 `3 }
//---------------------------------------------------------------------------7 h$ m  T- }: `* K* C
__fastcall TForm1::TForm1(TComponent* Owner)
1 n" H7 H8 i4 l8 L: {8 L( |        : TForm(Owner)9 g6 P: J8 H) V5 `/ P8 P
{
3 q/ C" [3 W) m* e9 `9 ?1 X$ X& r& i}
6 j1 G( ~& H8 H% y6 o" x//---------------------------------------------------------------------------
4 N$ E& P4 P: y* S. s0 p( bvoid __fastcall TForm1::Button1Click(TObject *Sender)
2 y9 m% `/ z& L5 h{
! {' A3 q% r$ Z# E* ?7 @        char sPath[MAXPATH];
  l9 e0 d. F1 |+ P  @; a# e        struct stat statbuf;% @" R% i, G2 S/ G  |; X
        FILE *stream;</P>: K+ k4 L3 @( `, b: w
<>        getcwd(sPath,sizeof(sPath));
4 I# ?$ g1 ^: J; H+ z0 R% R' ^+ C        OpenDialog1-&gt;InitialDir=sPath;: p( U7 Y0 `$ H  P1 v& P  A
        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
7 A" |7 m* E# x        OpenDialog1-&gt;FileName="fileFrom.BIN";
* S' ^# f+ o' x7 Q* ]        if(OpenDialog1-&gt;Execute())+ p/ |# c( N% Z
        {! h7 y+ M! d/ x" ^2 P0 p
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());4 Y, S9 z1 r  o' f! N" u
                stream=fopen(sPath,"rb");  n% s/ D/ U6 }% h$ \; G# H
                fstat(fileno(stream),&amp;statbuf);
: ]% [) m2 l; }( F                BIN_Byte_Len=statbuf.st_size;
) g* H% T1 v4 A                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);7 |( q7 {: R; h; b- J
                for(int i=0;i&lt;BIN_Byte_Len;i++)/ G  |# @0 @' {5 K
                        fscanf(stream,"%c",&amp;BIN_Byte); //read file0 b% E' K+ a* A. M' @
                fclose(stream);
, I7 h' r5 m( ~0 [        }
: n9 o( [5 N, {2 @5 ^7 B( ?}* e0 g* C1 ?3 C* d
//---------------------------------------------------------------------------
/ G! |+ K" j% E6 W1 Vvoid __fastcall TForm1::Button2Click(TObject *Sender)
8 _+ L8 i5 g% t# ~. U{5 d6 O# ]2 j, A
        char sPath[MAXPATH];
/ U. S8 H! _1 X5 y( Y        FILE *stream;2 [  X. M1 e. R
        getcwd(sPath,sizeof(sPath));//App.Path3 F  z( A* ~5 f7 r6 S$ P6 d. Q
        strcat(sPath,"\\");$ d, N7 j% {+ N2 {4 A( \6 A' P( Y% w
        SaveDialog1-&gt;InitialDir = sPath;& L/ p" Y, D3 K) l
        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";, A5 I2 J; v6 Q( f/ a4 G) k  l
        SaveDialog1-&gt;FileName="fileTo.BIN";) I& M9 M/ v+ b4 @( k- C
        if(SaveDialog1-&gt;Execute())
8 M7 _) d0 M$ x5 u" r. S2 ~3 b        {
9 M  u* q! p$ ~. b                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());
; \1 ^+ I* M0 w7 t                stream=fopen(sPath,"wb");
, o4 Y# h( _7 n. {+ l+ @. ?                for(int i=0;i&lt;BIN_Byte_Len;i++)7 U$ w; B  H; A
                        fprintf(stream,"%c",BIN_Byte);  //save file
0 u) ?' C# U6 |0 G- p7 }, A                fclose(stream);. q/ U! u5 l( G/ K& s4 r! u
        }
1 I9 w: h2 c* i        free(BIN_Byte);
4 g" a& U5 ~, d0 F}
: l5 x  f% Q' O//---------------------------------------------------------------------------8 n+ x: A6 }% |
void __fastcall TForm1::FormDestroy(TObject *Sender)
) h/ ?! b' }; N; T9 q6 b{6 q$ f; q7 g  r, Q/ _% _) A3 e
        if (BIN_Byte!=NULL)4 F: [) i% V6 \" [% x; k
             free(BIN_Byte);
% ?5 ~) _  L0 ?3 X! X! w' K  `* X}
. O3 U. k7 i8 w4 p" x- w3 S//---------------------------------------------------------------------------
' q4 D: y5 f8 Y; m</P>
$ p) S! ?7 s# t  b! \<>free(sPath); free(stream);此两句也有问题。</P>8 o" B% \  T) n5 w) _
<>char sPath[MAXPATH];不需要释放;</P>6 S6 A. n9 _1 u* ^
<>fclose(stream)已经起到free(stream)的作用</P>
/ L9 m! c. d2 ?2 K( S- B/ B0 F
[此贴子已经被作者于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-6-11 08:43 , Processed in 0.428299 second(s), 83 queries .

回顶部