QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
) z0 H; |* z: W/ P4 A/ F//---------------------------------------------------------------------------
; W+ l1 }( g) M2 j, C. x2 s/ z( V/ X! k  C6 E$ M% e
#include <vcl.h>: C, E9 l' ]8 E- G- d3 N# T
#pragma hdrstop
/ ]  q! M' ]7 B9 D
/ X5 U. N6 W- K+ h* y0 a& z#include "Unit1.h"4 W3 g/ I. M4 V$ I5 u7 s
#include <fstream.h>
* r4 B% t& N0 q/ g# v4 t5 G# O#include <dir.h>0 V% a: I+ ?- |. C) }
#include <sys\stat.h>/ P/ I: b" e. k. h/ e, i  G/ k
#include <malloc.h>$ x* E: V( A* Z% Z3 S1 b
//---------------------------------------------------------------------------
  A; c% E3 N) y0 u2 B#pragma package(smart_init)
5 G  A2 R& f* l( c8 y1 S! _! ^+ j#pragma resource "*.dfm"' ]2 L9 c8 S5 X$ `+ |1 E
TForm1 *Form1;6 f( M3 ^7 }6 ^9 b$ Z+ t5 R0 Z: s
        unsigned char *BIN_Byte;
% C, ]. ]3 L1 x" U5 P        long BIN_Byte_Len;& l% E  `( t$ t+ @4 K
//---------------------------------------------------------------------------) j: g+ m8 b. a! {4 Y! T
__fastcall TForm1::TForm1(TComponent* Owner)/ e7 g; Z' p3 J. t- O) N
        : TForm(Owner)
: W8 d! K2 _" f$ ~  w{& U8 ]* t& i9 a! T  I9 }1 i/ k! h
}% C6 `% f# @3 @) D2 `3 G+ p; T
//---------------------------------------------------------------------------
4 m8 b1 y7 N- E# [void __fastcall TForm1::Button1Click(TObject *Sender)
/ b$ {' K. k' @7 Q! D1 ?; Q) E{: ^: D: b8 U! o5 b3 P: w6 S
        char sPath[MAXPATH];
0 z; ?9 m, u) X. a! Y; c        struct stat statbuf;* W) d5 I. M! N6 }: P; e
        FILE *stream;
5 I! o* [  v+ O7 c9 C: X
4 q; Y9 ?+ L: S# l" v        getcwd(sPath,sizeof(sPath));
. k3 h. T2 }: p- d# @        OpenDialog1->InitialDir=sPath;
& U1 O. X. q$ k* \' K4 t        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
0 B5 f' V  N( A        OpenDialog1->FileName="fileFrom.BIN";
" T, @# I" |+ o3 n        if(OpenDialog1->Execute())- C- F4 x! K/ ]* l6 _
        {
6 L: m# O2 @7 h  V4 F, {                strcpy(sPath,OpenDialog1->FileName.c_str());
; A! c: i4 V, y& Q9 @                stream=fopen(sPath,"rb");
7 }7 k& P- Z1 z5 e; U8 X) }6 o                fstat(fileno(stream),&statbuf);
9 K& W9 z1 B' F' R- X' R! M                BIN_Byte_Len=statbuf.st_size;
8 Z& o0 J# `! V% r6 D* D                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);
0 k, R! J- W7 E& R4 X) Y                for(int i=0;i<BIN_Byte_Len;i++); E* I7 @& H/ i& B
                        fscanf(stream,"%c",&BIN_Byte); //read file
; p* I6 j) P6 k                fclose(stream);% _- x* Z; ]' v) E8 w! \
        }
5 F1 A& u0 X" r3 \- P        free(sPath);
( y. Y9 M2 _$ l1 U3 s        free(stream);  F( n3 f) ?8 i; M2 n: u# ^4 f0 ^, N
}( z) _( m+ }5 [, A
//---------------------------------------------------------------------------
' N- o- J3 ~6 \- o. H$ R# L0 Tvoid __fastcall TForm1::Button2Click(TObject *Sender)
/ Q  K, b# V' i# D% V  C: @7 f' I{% J4 U6 E  D0 o" P8 o
        char sPath[MAXPATH];
& \* j5 Q# A' P! H        FILE *stream;( v/ J% r# P3 x  W. w# O
        getcwd(sPath,sizeof(sPath));//App.Path
" Q% f: e+ |. H6 @% r9 N, ?        strcat(sPath,"\\");4 ?% X* U6 f% a2 R+ z% y+ [
        SaveDialog1->InitialDir = sPath;
/ r2 L6 e# q; f/ L$ ~3 S9 J3 S        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";4 f4 m9 B9 U1 Q" T+ f
        SaveDialog1->FileName="fileTo.BIN";7 U2 W8 D9 d7 }
        if(SaveDialog1->Execute())" W7 p& P* F$ `
        {
/ R! c  Y8 f+ j% ]. n6 H5 g                strcpy(sPath , SaveDialog1->FileName.c_str());
* c- I6 d# @; X. A5 u                stream=fopen(sPath,"wb");
% h" t8 V6 L+ c$ O+ R- g3 [2 J                for(int i=0;i<BIN_Byte_Len;i++)4 H: i8 y$ A+ x% ]$ s4 @+ r# K1 T
                        fprintf(stream,"%c",&BIN_Byte);  //save file7 A! J4 G) a* k# A' P5 }+ `) w
                fclose(stream);
. A+ q* T, n; l9 A! L( ~4 Z7 w. o        }3 w3 l2 h& v( @- B) \
        free(sPath);+ S% h9 A; z. g0 M9 s1 s' U4 q, q" ]3 o+ y
        free(stream);; p" a; W' T$ ~# H
}; i1 h2 p, H. R( ]2 D) y
//---------------------------------------------------------------------------
7 U' n7 Z. c( |, V3 T& M: Hvoid __fastcall TForm1::FormDestroy(TObject *Sender)
: @4 [4 L1 L! y) i1 H$ q1 g! s{; V, f7 Z8 C# Z: f, u/ a, n  N; |
        free(BIN_Byte);7 J# v5 Q7 l0 `& m( C
}
, P: {2 K! \& j% Z8 X//---------------------------------------------------------------------------4 S5 r! O/ x' [6 M+ ^& j
. s' X: b: w% m; Q, f! H$ U/ |
打開一個檔案,再另存為另一個新檔案) d6 N; s' U* w* D0 U/ p% B' p
結果兩個檔案內容一樣3 K1 E2 y3 t7 Z0 r* v
順序不一樣了3 r3 K( d0 U5 i( o4 a: j7 b
檔案前面一段內容跑到結尾去了( f* c! a' ^6 w$ S% V8 s
就像下面的情況
/ N9 T! ]: {4 \4 l$ `/ i4 U原來檔案內容:ABCDEFG
% q5 u% n* F  ~! T新檔案內容:CDEFGAB9 v+ o5 w  f5 V& {/ m$ \/ s
老大救救小弟哦8 l. T$ b0 l: {
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>& t1 d. M$ X% N
<>alloca:</P>
1 v+ b* o  x3 }<>Allocates temporary stack space.</P>. a/ U1 H: {. H! N( E, m
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>3 U( F7 k- r+ m* p' g- o. e
<>malloc:</P>
4 D$ ]( |' L8 f' U4 O<>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>
2 z% R: \& d# r# ~  n; y<>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>
0 [# R, n+ H9 |! Y# [7 I' f2 L0 m4 ^
<>以下是改后的代码</P>. s! ?7 U: m+ t+ S1 j' f/ I
<>//---------------------------------------------------------------------------</P>
) [  |4 o* w1 e# I  g2 X<>#include &lt;vcl.h&gt;9 [# V* ^4 j0 ]' `+ c2 b% p
#pragma hdrstop</P>7 A2 A% l" n# h8 w9 q6 o8 J
<>#include "Unit1.h"$ n( j3 b- {, h& Y. Z
#include &lt;fstream.h&gt;
9 {; q8 j: P5 f6 c5 X! v; l2 U#include &lt;dir.h&gt;6 y) ^! f- \. J! O! E
#include &lt;sys\stat.h&gt;
3 n% P* s' J9 Q9 m, q+ ?#include &lt;malloc.h&gt;/ D3 V; y* x3 S7 B
//---------------------------------------------------------------------------. c  Z& ~+ f+ Z  y! |: F
#pragma package(smart_init)
/ b) z, E& U5 t9 J3 ^#pragma resource "*.dfm"
: U7 S5 x1 B: j$ b6 q# GTForm1 *Form1;
4 [+ f' A( y  Q( z$ l2 k        unsigned char *BIN_Byte;
/ j; a1 ]) L; r0 e        long BIN_Byte_Len;5 M% q7 }% T; {5 I$ |! c; @
//---------------------------------------------------------------------------4 `0 T9 G( j  m2 _; ^2 w, n  F
__fastcall TForm1::TForm1(TComponent* Owner)
1 F  x7 o( f; b2 q* g        : TForm(Owner)
5 B0 u5 }/ x% H. L; g$ D4 z! G{
) V( K. i2 T* z  R}5 i2 ]. H3 V3 @% m; ?
//---------------------------------------------------------------------------
- F7 X1 \# a' P: W! Ivoid __fastcall TForm1::Button1Click(TObject *Sender)
& r! g. w7 V' @8 f4 R' H# a+ F, y{: R- ^# W; R9 @% `; Q* X2 _3 _# t! X8 O
        char sPath[MAXPATH];
$ j# k" W: s$ }+ k" Q        struct stat statbuf;& J( X) i( D: Z
        FILE *stream;</P>2 H7 \5 y+ Z0 h* R& w* d& b# p
<>        getcwd(sPath,sizeof(sPath));' T& o) p4 w% ?( z8 U
        OpenDialog1-&gt;InitialDir=sPath;
2 Z' l$ \) F: r3 N# A        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
6 D( q, L  ?: c  P2 ^! U- g6 S        OpenDialog1-&gt;FileName="fileFrom.BIN";
0 v& C4 n5 s  V0 f3 S2 H. x2 }1 o' u        if(OpenDialog1-&gt;Execute()), \7 i/ y; H3 ]4 ]
        {5 A# U& ~1 }' P  j: L& u5 _  C4 v
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());1 O3 x  _7 q) @- N3 f3 n6 q
                stream=fopen(sPath,"rb");" @6 s( a* R; b
                fstat(fileno(stream),&amp;statbuf);; b, G( `, A3 b, g- n
                BIN_Byte_Len=statbuf.st_size;
- u8 ~7 V2 a  r) @                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);7 @1 t" A2 ~  }0 `9 z/ f' Y: n
                for(int i=0;i&lt;BIN_Byte_Len;i++)
' \9 {, X0 L+ X& J: \% Y6 D6 g                        fscanf(stream,"%c",&amp;BIN_Byte); //read file
4 N# ~$ V8 k: B" {5 S                fclose(stream);" u- d  D* v, F( |* c
        }
$ j- Y* B) m1 `9 ~6 H: y}
6 E& _3 X0 u1 ^6 k) v+ g$ j//---------------------------------------------------------------------------/ b8 p4 I: s* x. ]/ @& l$ D
void __fastcall TForm1::Button2Click(TObject *Sender)
! u2 W: |8 h9 o{
9 P% k2 E5 R- O9 h        char sPath[MAXPATH];* U* O0 C+ I) Q% b2 p: M% j
        FILE *stream;" m! ?0 l& h) N
        getcwd(sPath,sizeof(sPath));//App.Path/ T0 B& W/ y, k7 h6 t; ]+ _7 J( b
        strcat(sPath,"\\");0 W1 \& A6 s2 V# i* h
        SaveDialog1-&gt;InitialDir = sPath;( H) \) b6 w) l* q7 j1 ^7 q7 X: E
        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
! c( r& j. O6 e! P7 w        SaveDialog1-&gt;FileName="fileTo.BIN";
3 S" q# Q) r0 J        if(SaveDialog1-&gt;Execute())3 m8 z% B5 e2 _' T( o+ L/ ]( y
        {3 d* g; N+ S5 r
                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());# Y# G* k$ Y% `2 o& ]
                stream=fopen(sPath,"wb");
( W6 I2 O3 I0 Y% Z  l: U                for(int i=0;i&lt;BIN_Byte_Len;i++)6 Q7 E# r. U' F8 h, D+ _* a1 ^+ u
                        fprintf(stream,"%c",BIN_Byte);  //save file
) @# k& g2 q% T                fclose(stream);/ c/ R5 {/ t+ c; @8 i! M. s
        }
9 T9 U$ @6 l& ]4 e  w5 V        free(BIN_Byte);) O0 n1 E3 U- y. I2 w! A2 A
}, P) u9 z: H3 Q: ?! \+ `+ f
//---------------------------------------------------------------------------
/ p+ w# P  a& g' gvoid __fastcall TForm1::FormDestroy(TObject *Sender)
0 c0 n% D, B+ z2 W+ X{
7 d; N. ]$ z, A; h        if (BIN_Byte!=NULL)8 D  A& V6 O- J* ]/ f, i4 ]) ], }
             free(BIN_Byte);# r% r" d4 a, i
}
+ j# W5 b  j0 r. y/ ]+ |- Q* i8 T//---------------------------------------------------------------------------
" }4 c8 k# c! Z</P>: N" c" ]! Z3 y% U* j/ Q! d
<>free(sPath); free(stream);此两句也有问题。</P>+ Z$ ]8 G; G4 B
<>char sPath[MAXPATH];不需要释放;</P>7 M! C" V! n: j' X+ p! q
<>fclose(stream)已经起到free(stream)的作用</P>
1 m5 Z+ h0 b1 e' f8 K: x
[此贴子已经被作者于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 06:15 , Processed in 0.361136 second(s), 83 queries .

回顶部