QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;/ r, M: c" d; a& |, ?$ O& _' N+ p* e
//---------------------------------------------------------------------------5 f" x) j: `4 Z- M* w

5 ?* a5 S& O8 J6 G1 l$ i#include <vcl.h>) A$ r% f& }- z" M. C2 B
#pragma hdrstop
: t3 g* c4 i; |( v1 ^" t, O& T+ f: ]" H
#include "Unit1.h"& r2 r3 K( C6 ^* n  K
#include <fstream.h>( |. H, o( k7 ~0 o
#include <dir.h>
/ K$ Z9 z" v8 i, [: ?8 J5 i#include <sys\stat.h>2 y% w7 t# g/ d$ X6 H0 {
#include <malloc.h>
! s2 Z- Z9 w* v% `3 M//---------------------------------------------------------------------------
6 r5 Q5 B! h. q" v! L7 [#pragma package(smart_init)
" M- ]) R3 b9 O# |#pragma resource "*.dfm"
0 o3 C: E) s3 l# z3 MTForm1 *Form1;
! `3 ~1 S" w8 I3 q        unsigned char *BIN_Byte;$ F7 b  ^& e9 ~
        long BIN_Byte_Len;
7 W8 U7 U9 E/ K7 [0 C; c' b4 i! J. e//---------------------------------------------------------------------------# c. Q2 Q" Y: u( g! P! A
__fastcall TForm1::TForm1(TComponent* Owner)
4 f/ T4 D3 b! a, U        : TForm(Owner)
9 t3 x" J7 {7 H: P7 g1 @9 u{
) W1 p# V# u9 R! F}
0 s+ S+ y5 e# u0 G% F//---------------------------------------------------------------------------
" A" }# _) Y+ |6 X5 Y+ Qvoid __fastcall TForm1::Button1Click(TObject *Sender)
# v4 Y- ^5 i( P4 Y{" K: E7 i2 C0 ^; V% r
        char sPath[MAXPATH];- l, N) _8 D( q4 O
        struct stat statbuf;
2 b0 i3 A4 q- U: ]        FILE *stream;
4 T' ^0 S: S  x5 \5 W( f# H' g9 T/ l4 x. u5 a
        getcwd(sPath,sizeof(sPath));# K, ~2 _5 {; S4 f( e; m4 M7 I; s
        OpenDialog1->InitialDir=sPath;
' a/ g  o+ Y% p8 O' d        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
$ ]: |( Y, l/ R2 s! x4 N$ d        OpenDialog1->FileName="fileFrom.BIN";
" {, C6 u$ y+ j5 U5 j        if(OpenDialog1->Execute())& _5 t0 U- Q3 k! e( g! {
        {/ F1 n' U3 w0 z6 @
                strcpy(sPath,OpenDialog1->FileName.c_str());8 l3 d% H1 `6 i
                stream=fopen(sPath,"rb");
: \, l0 n1 m( Y* C0 ~/ @- y6 j                fstat(fileno(stream),&statbuf);( p1 l% h4 R; d% s% i' A) \4 l# b6 z6 B
                BIN_Byte_Len=statbuf.st_size;
+ n. Z4 n8 L4 G- Y6 [5 f                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);8 V; S+ m# b3 [) A/ r
                for(int i=0;i<BIN_Byte_Len;i++)5 {1 [, O3 b6 q. d6 _
                        fscanf(stream,"%c",&BIN_Byte); //read file! M; y  |; h8 a' B3 B8 f9 Y1 e
                fclose(stream);4 k- Q' W: d1 z# d+ |
        }# k1 Y6 ~& }6 ^8 ?  M( i1 B; z4 h
        free(sPath);+ q; s: U( h7 ^0 u, @& r
        free(stream);
- A/ M  a3 ~: V* |0 x}
5 R/ f0 D. ?/ ]# c! ^) x9 l& X//---------------------------------------------------------------------------5 ^% q% p% {7 p2 h! B1 _, [
void __fastcall TForm1::Button2Click(TObject *Sender)- v/ C+ C) t3 R$ u# v  G- K$ F
{, p& \7 U. a7 y7 H. `
        char sPath[MAXPATH];
7 L8 E2 ?. A% u        FILE *stream;0 l& c# y: Q/ S/ q# f; n
        getcwd(sPath,sizeof(sPath));//App.Path
) }6 B8 |6 r* p        strcat(sPath,"\\");
" B" K8 ~, B( b5 @0 R/ g* l        SaveDialog1->InitialDir = sPath;
. d4 Z" r: j' m& l0 E$ l& I% q4 R        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";5 Z0 A" o0 t% U) e$ u6 e5 c
        SaveDialog1->FileName="fileTo.BIN";2 K: W/ q$ B4 y2 U+ r1 @& N
        if(SaveDialog1->Execute())* S6 ^' j. ~. z
        {
9 a* ]- d1 f; Z- h3 B* j- i                strcpy(sPath , SaveDialog1->FileName.c_str());+ k! p5 u0 P# E
                stream=fopen(sPath,"wb");
- j8 U9 K7 F: E" C( U8 b                for(int i=0;i<BIN_Byte_Len;i++)( l- z; y5 ~5 ^( g1 z; o8 k
                        fprintf(stream,"%c",&BIN_Byte);  //save file
8 V# q8 @% V+ _; _                fclose(stream);
  O: N, ~& J% G& I9 A        }
/ d; [$ y, k' y9 J6 e        free(sPath);
4 P( G1 p' [5 f. z2 w1 X        free(stream);
4 k4 T5 C% {1 z# V% d}3 _  n  O5 f3 @
//---------------------------------------------------------------------------
$ F# [6 w  Y7 q$ B1 Tvoid __fastcall TForm1::FormDestroy(TObject *Sender)7 Y8 _, a, v5 b0 l7 l/ d; f8 H
{1 o- p4 x+ \2 A+ m' g0 j
        free(BIN_Byte);  _! m+ r! w8 |7 a9 F' d
}
+ h8 U5 @1 R& [+ p$ V0 B1 d' @5 E//---------------------------------------------------------------------------! y5 h* H3 L3 j: z6 d3 H  H

, V$ |% g0 Z  z( O4 c$ a打開一個檔案,再另存為另一個新檔案# R0 j9 I6 I. I" E5 q
結果兩個檔案內容一樣
8 U8 h, u; h1 R順序不一樣了6 K! |6 h1 M8 o2 ^4 @3 z; e
檔案前面一段內容跑到結尾去了
' Q% M( h- P& T6 O就像下面的情況
4 p% K; p) i, Y$ a5 L; {原來檔案內容:ABCDEFG
" e( }: r7 J! L/ {+ E新檔案內容:CDEFGAB5 w/ n& D5 V- q5 c! l: N) q" P
老大救救小弟哦; o( C- N6 k* t) L* J: W& {& v
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>
' G; I+ t6 K& E; J/ ~) e<>alloca:</P>4 m7 W/ C( ~: i# T* D% _
<>Allocates temporary stack space.</P>" q  a% ]# R- c, B2 [& B
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>1 z2 T& J2 ?4 y" E" s" `# h, J3 d
<>malloc:</P>- x3 D! M, `2 k1 t; X
<>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>
) W! ?" {; h% F2 x- v<>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>
4 r5 M# ]$ p% r6 [  a5 Z$ j5 w' W+ z9 Q5 S# L2 q5 ?' g
<>以下是改后的代码</P>& L" U/ |2 d% r8 p
<>//---------------------------------------------------------------------------</P>0 f: Z9 W! T% W6 o
<>#include &lt;vcl.h&gt;
/ w6 U9 j& G3 o2 d) U) ?#pragma hdrstop</P>
$ `  u8 z1 O0 V/ M! d2 Y, z8 w<>#include "Unit1.h"' E6 P6 D' C9 T* u# e0 `
#include &lt;fstream.h&gt;
( a* p: t: o% V3 I; p#include &lt;dir.h&gt;
" \) I/ ]" B  p2 H, _7 P. C! c#include &lt;sys\stat.h&gt;, n% z- Q7 g5 l% N
#include &lt;malloc.h&gt;: U/ Q4 @3 g* E1 ]& b* `1 }6 \
//---------------------------------------------------------------------------( f! M* j- N* f- J7 V; v3 H
#pragma package(smart_init)
- s* t2 ?( g, V! g1 s7 j& S  w#pragma resource "*.dfm"
& P- l6 r5 w  l* ~TForm1 *Form1;& C+ u$ p( A+ U5 B, @$ [% l8 N1 O1 B
        unsigned char *BIN_Byte;* }1 Q  M) T; G
        long BIN_Byte_Len;8 m' `3 U0 _9 i0 ?1 J2 x" x
//---------------------------------------------------------------------------
+ Z; C6 |( I5 u8 k# r: {0 g' ]__fastcall TForm1::TForm1(TComponent* Owner)
8 |/ Q! K4 z2 V4 G0 O3 N        : TForm(Owner)3 S% p. B2 U" C% [0 E
{
6 e" C; W, l& N+ }}
& ]3 @7 g5 d) G  @5 c1 k5 D# Z//---------------------------------------------------------------------------5 n6 h" ~' v2 {! h9 }" _1 _: ~
void __fastcall TForm1::Button1Click(TObject *Sender)
  n0 F  N0 A/ b' _; P7 B8 Z+ R{
. i* s0 w* u1 e' Y+ y        char sPath[MAXPATH];, i9 p! ~$ [$ T- b
        struct stat statbuf;2 V" g" v4 e( H
        FILE *stream;</P>
+ N5 v5 O1 a; A8 s) A<>        getcwd(sPath,sizeof(sPath));- T* A6 V8 f0 k/ I7 d
        OpenDialog1-&gt;InitialDir=sPath;2 }6 O3 \  L& v! m4 S; c
        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
) s& L/ l* S8 s0 K3 D/ c* u        OpenDialog1-&gt;FileName="fileFrom.BIN";
9 E* L- O- [  P0 q! D) p* E# p: v        if(OpenDialog1-&gt;Execute())
5 r. i2 f. ]1 A. v" W+ y- C        {
' }& c& m; G# a. Z7 G6 A( D( f                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());9 X- ]" }4 ~6 B9 t. @) E; C- ~1 B) P7 m( v
                stream=fopen(sPath,"rb");
0 B0 [' t8 p, f+ ]                fstat(fileno(stream),&amp;statbuf);. ^8 X* |, z# ~
                BIN_Byte_Len=statbuf.st_size;
1 U3 @$ P, S  j) t( |" I                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
) Z* }3 X% Z. n7 C                for(int i=0;i&lt;BIN_Byte_Len;i++)
9 }+ a, A  d. q                        fscanf(stream,"%c",&amp;BIN_Byte); //read file# p" z. Y: i5 I+ e: O$ k
                fclose(stream);3 e5 @, L0 O- `- V9 m
        }: T2 ~; j# [4 |* E+ G
}
2 I& i; Y5 V* R" ?0 @/ B# o; r//---------------------------------------------------------------------------
+ I; X# |# G0 N& V9 q, rvoid __fastcall TForm1::Button2Click(TObject *Sender)1 j% _( q+ S9 J% H) C' f- ^
{, U9 `9 d) s: H8 L9 I8 [3 q, ^
        char sPath[MAXPATH];, O: V  Q( i/ l" ~. V
        FILE *stream;3 R% B; l) w' p& `( E$ l; g
        getcwd(sPath,sizeof(sPath));//App.Path- {7 Z" u( Z, h& C7 ^  t* L
        strcat(sPath,"\\");
/ U- n6 f$ \; x. s& M& v        SaveDialog1-&gt;InitialDir = sPath;
( i' C# T9 G8 o7 i, a* ^        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";$ O( K' B6 `. y8 n8 a& w
        SaveDialog1-&gt;FileName="fileTo.BIN";
9 l" o8 c0 I9 g/ ?+ {; f        if(SaveDialog1-&gt;Execute())* e% x2 j/ e! t1 _$ t2 m3 l
        {
% \( I/ I5 s  N: s3 X! h                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());; ]+ G. Y, h! X/ F5 y2 L
                stream=fopen(sPath,"wb");* H# L! V: s) }, Q" K4 V$ q5 W
                for(int i=0;i&lt;BIN_Byte_Len;i++)( \3 k+ G4 Q) X$ J9 ?! A
                        fprintf(stream,"%c",BIN_Byte);  //save file% N$ s6 W$ }% V0 b% u" z( B
                fclose(stream);" i( x! w& R" `& k' V
        }
7 t! m. l- ^! Y& e8 r* \        free(BIN_Byte);$ c% y2 u  }. s7 h7 |' B
}
/ M$ R$ I, g2 |//---------------------------------------------------------------------------  K: |: F4 B% x  l$ N0 j6 _) C
void __fastcall TForm1::FormDestroy(TObject *Sender)
5 Y2 S8 ^+ g4 y{
/ p! s. ^9 y% u( p9 S9 d/ h        if (BIN_Byte!=NULL)
. C+ X! l& c, P5 N5 Q$ ?             free(BIN_Byte);
$ }; n! A7 J& f! G. Q' I}
# n& g$ j' B. J( G//---------------------------------------------------------------------------
9 _# \. P( X3 ~6 `2 Q( q. L: e</P>
; p3 q+ |9 P, B<>free(sPath); free(stream);此两句也有问题。</P>
+ X) m( b5 f" U# m<>char sPath[MAXPATH];不需要释放;</P>
  p' F/ t8 Q: \* X<>fclose(stream)已经起到free(stream)的作用</P>
" C$ |4 x: F# t% g" u! S$ {
[此贴子已经被作者于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-13 00:18 , Processed in 0.467733 second(s), 83 queries .

回顶部