QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;
, \/ P7 M& w: ]$ ?; K4 w//---------------------------------------------------------------------------; [. G" y" Z( C

: f+ b/ J3 T6 x1 z% F, K#include <vcl.h>6 ^8 h2 x# Q# g% M7 K. v
#pragma hdrstop4 z; _* I/ z9 E* k0 `

% S* G, P: Y: m#include "Unit1.h"5 v7 m! r- r) x+ G" J3 X' F
#include <fstream.h>5 s% v0 N( s$ r1 F0 E1 A8 a; H
#include <dir.h>* v: @' S: Q/ p: r
#include <sys\stat.h>/ C( o! O' }) ~+ I. Q
#include <malloc.h>' A6 T1 k/ l1 A/ x
//---------------------------------------------------------------------------
- U8 F+ ]$ U2 J: \. {; ?0 W1 N3 [#pragma package(smart_init)
" j, d8 v- S* H0 |#pragma resource "*.dfm"
; R5 W  `8 r5 c0 w8 ~4 ETForm1 *Form1;3 ]% j, h% j- t! z
        unsigned char *BIN_Byte;
* ]( y" q! Z& p        long BIN_Byte_Len;
1 v+ Z/ B1 g: B/ ?//---------------------------------------------------------------------------+ w, V+ G' \- A9 j' d
__fastcall TForm1::TForm1(TComponent* Owner)6 x/ g- ^) D5 t! A* n
        : TForm(Owner)
2 d( M  w3 h/ e) c+ @" o* p{
) \& T2 n# U5 y4 b2 f/ o4 k' O}
! N/ r* H  x9 U# C//---------------------------------------------------------------------------% d' J* {$ ^7 m7 q3 @
void __fastcall TForm1::Button1Click(TObject *Sender)
- L( p5 r0 @3 u; F" J8 D{
& R0 y; x2 B1 h* w: Y  }9 ~        char sPath[MAXPATH];
/ Y$ Q2 k+ B$ x" Y+ v        struct stat statbuf;
( E+ g# y- {/ y  M* G        FILE *stream;  |5 {$ x) l# t) ~' j7 I
; a* F5 Z6 E4 J; r5 m8 G7 B4 _
        getcwd(sPath,sizeof(sPath));# Q1 o7 E4 ~9 I0 q0 ?4 G
        OpenDialog1->InitialDir=sPath;
4 d, w; t3 G  _: b        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
- S" t! b  l5 D8 J. Y) [9 B7 @( E        OpenDialog1->FileName="fileFrom.BIN";8 F) m+ Z5 S, [2 ~/ }
        if(OpenDialog1->Execute()). r. n. g5 n4 q) E4 N
        {4 D4 q6 B5 f& v7 D
                strcpy(sPath,OpenDialog1->FileName.c_str());: I2 X9 X  d0 G8 l9 q( j" s* e' ]
                stream=fopen(sPath,"rb");
# S* R" J% y- e                fstat(fileno(stream),&statbuf);
( l. a" T+ [- F: Z4 O! M                BIN_Byte_Len=statbuf.st_size;" c' Y- n- ]0 _6 J  g5 `
                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);
$ w! u4 D( u" z  P4 n2 k7 v                for(int i=0;i<BIN_Byte_Len;i++)1 a2 r# j. f  H) F. [
                        fscanf(stream,"%c",&BIN_Byte); //read file6 |% F2 j+ |$ ]1 M! z: k
                fclose(stream);
% l7 \$ ?; V/ l  M        }
6 l. _1 J9 _) E4 [! F7 Z        free(sPath);( }0 D$ U$ |- N' u: T
        free(stream);
8 w/ x: M/ [6 n" d+ P8 q}
; \1 s8 F5 C2 ~1 l) ?//---------------------------------------------------------------------------
; X/ j! q& i* T, z. i! n, hvoid __fastcall TForm1::Button2Click(TObject *Sender)
7 C0 Q) A4 E  [* @2 t# x4 q% T{
2 p5 F5 W2 c7 o" R9 i        char sPath[MAXPATH];
  h5 x7 J+ C2 ?1 J  O        FILE *stream;+ D* D! d) |( N6 @8 \
        getcwd(sPath,sizeof(sPath));//App.Path9 L7 ~' D2 [8 k' Z# p% p
        strcat(sPath,"\\");: S9 T1 n7 n+ B* }6 \2 ]! H! Z' M
        SaveDialog1->InitialDir = sPath;9 L- m$ r6 F: \% I8 }  y( Y# X  g
        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";; d% g! X2 n# d6 j# @7 a8 b
        SaveDialog1->FileName="fileTo.BIN";% j( q$ A9 ]! c$ l
        if(SaveDialog1->Execute())8 F' C0 M! w0 K2 w
        {
$ Y3 m0 Q4 y% N+ `6 j: V: B- u8 u                strcpy(sPath , SaveDialog1->FileName.c_str());% `: Q/ y: M' T. k' f
                stream=fopen(sPath,"wb");0 C, D; ~6 x) b7 a: f9 V/ B
                for(int i=0;i<BIN_Byte_Len;i++)
! n) q) ^$ j! d                        fprintf(stream,"%c",&BIN_Byte);  //save file$ v; _3 u: _  O
                fclose(stream);
. o; Y0 o0 J6 W        }
4 a: t# \) Y4 H        free(sPath);
) v& h" i3 m/ q8 q+ `        free(stream);
- R, o4 S# F% |}
% c" n+ ~8 U$ I! F2 P4 Q9 F) t1 T5 o//---------------------------------------------------------------------------
) ^- o1 j- w) @( \+ Kvoid __fastcall TForm1::FormDestroy(TObject *Sender)8 M$ }7 \, E" q. a/ S
{8 v; p3 f) t/ j* d
        free(BIN_Byte);6 @; d6 v" _" B1 w9 B/ ~+ v
}, j7 y+ M0 g/ W9 |+ F' A4 b
//---------------------------------------------------------------------------
& t+ i4 Z# z/ m2 B) R- G
0 w" x2 ]* W  h$ d6 P2 f打開一個檔案,再另存為另一個新檔案
0 I0 m  [2 \% x+ ~  n3 P0 B結果兩個檔案內容一樣
0 ~1 d; g7 F' y, o1 r' e0 `2 q! I順序不一樣了3 }4 k9 T+ G! y+ z8 I% b0 O
檔案前面一段內容跑到結尾去了
6 j  y8 a+ ?/ X! M7 e4 d0 `就像下面的情況0 w$ u1 g# b) p6 c8 \  `8 a
原來檔案內容:ABCDEFG
8 j/ T/ X# ^# q; C4 W新檔案內容:CDEFGAB, {; [/ v9 S0 x% Q5 D  w5 r3 B
老大救救小弟哦9 a7 V. b+ a) d; w2 S" X
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>2 n/ C; X2 ?: P1 g0 j
<>alloca:</P>
5 I! W  p  A1 s& m# H0 r4 F8 `% P; |<>Allocates temporary stack space.</P>+ h5 U) W' z9 P9 M' P1 P
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
; M: V2 t: ]' g<>malloc:</P>  G& U: G; D9 O) K9 K
<>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>
9 P; Y- z+ c6 q. T, B  z9 h: A<>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 C# M# Q& {3 W, \8 G. z( d

5 x$ }& k- L: Q2 j' |1 z<>以下是改后的代码</P>
! v; G" ^3 k3 w& y5 e1 F* |: |& v# C<>//---------------------------------------------------------------------------</P>+ V/ A$ T. N7 Y8 q
<>#include &lt;vcl.h&gt;0 Z4 u! G8 Y; ~: A  ^. a  f
#pragma hdrstop</P>% F3 {' _( H, `6 g& b& }* \4 T
<>#include "Unit1.h"
) M1 r) M( k' S" K( x5 h#include &lt;fstream.h&gt;
. O/ z+ h0 C6 u#include &lt;dir.h&gt;& g$ ^1 e9 @. v0 v! W, c8 b6 {
#include &lt;sys\stat.h&gt;
+ N+ u) V8 i. C+ D' N2 Q' b#include &lt;malloc.h&gt;
2 M% K9 C" L1 Q//---------------------------------------------------------------------------
/ l5 E% b/ [- _#pragma package(smart_init)6 U. M# C: ^  i/ ^% _8 p7 F* M
#pragma resource "*.dfm"# _# _4 @0 x2 g
TForm1 *Form1;+ o: [& T* h7 W# s; o1 }7 l' R: B" h. D
        unsigned char *BIN_Byte;
* z6 Y5 K; r0 L* I        long BIN_Byte_Len;
9 y. ~% m3 @4 C9 k" j# R//---------------------------------------------------------------------------
% p+ T2 E* u& K6 N0 D2 J+ y* e__fastcall TForm1::TForm1(TComponent* Owner)
0 ~+ t+ }6 m0 b7 `) K. [* L1 g) a        : TForm(Owner)% Z( Z6 \! i" g, u
{
5 S; e9 v# x7 _: x9 E1 H% R) G( i0 v}. z% U( M9 V3 O
//---------------------------------------------------------------------------, {& s% v$ |3 ^+ F& Q" f
void __fastcall TForm1::Button1Click(TObject *Sender)
3 n/ N8 w- a6 d( X! Z" E{/ K) L$ Q+ R6 Z* _; h, ]
        char sPath[MAXPATH];$ ^6 b" o$ T. a) V5 k/ }* U- ~
        struct stat statbuf;8 _# I6 I5 _$ Z2 E2 o9 P, x1 J
        FILE *stream;</P>
' a3 P/ I: x8 }  P- R% A4 q<>        getcwd(sPath,sizeof(sPath));2 M+ M" O# `+ |) f& E8 C5 o  E
        OpenDialog1-&gt;InitialDir=sPath;
) H4 k3 c" X' @        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";
8 u: V2 z; K: \2 m. I3 S+ N        OpenDialog1-&gt;FileName="fileFrom.BIN";- {% W' f% ?- R8 T* i0 M
        if(OpenDialog1-&gt;Execute())
5 E8 G* Y' X; K        {$ L1 p+ ?' a2 v
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());+ M1 J7 S+ N0 K( s/ V
                stream=fopen(sPath,"rb");
# D5 `& k! D+ Z5 ^, y, N( v3 M( ], ~                fstat(fileno(stream),&amp;statbuf);- o7 e* `& m! T
                BIN_Byte_Len=statbuf.st_size;
$ d$ v" u; G! K' Z                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);
, m0 h, G2 H0 u3 u+ X                for(int i=0;i&lt;BIN_Byte_Len;i++)
% |( g! B* f0 V& q                        fscanf(stream,"%c",&amp;BIN_Byte); //read file
  T9 O# j& o, q8 P7 e7 E: `                fclose(stream);% a# l$ [( k. u" l8 V
        }
! |& o- @) T0 k" j1 B! ~}3 Q4 q' a) A0 E: D. e' ]9 e# E
//---------------------------------------------------------------------------
# Y5 c) q- @6 v6 Uvoid __fastcall TForm1::Button2Click(TObject *Sender)# F0 p1 r: w4 ?0 {. H4 |
{
2 l( k4 n; z* Y  o, g# y        char sPath[MAXPATH];
1 |3 d1 p, p# j3 C0 v        FILE *stream;# I# m7 E3 N* }# A$ ~" H
        getcwd(sPath,sizeof(sPath));//App.Path
. ?) S9 E$ Q8 i+ C* f; m( L        strcat(sPath,"\\");
: v0 N, S' h9 U        SaveDialog1-&gt;InitialDir = sPath;( f# r* T6 v8 Y2 s
        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";  E( z! ~8 ~# r
        SaveDialog1-&gt;FileName="fileTo.BIN";
9 M  T" g2 Z; Q' @        if(SaveDialog1-&gt;Execute())7 R) }! X9 g* C, u! }# p5 _
        {
# }- _$ P1 i9 P+ ?                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());
3 Y2 r. v6 o# f( W, G                stream=fopen(sPath,"wb");
' N4 Z& G% R- O# j                for(int i=0;i&lt;BIN_Byte_Len;i++)
. `+ B2 ~: W8 ]" C, u% A* X! J                        fprintf(stream,"%c",BIN_Byte);  //save file
/ ]# `  u+ e2 P; L& t6 K                fclose(stream);
! X5 K4 O& D- ]' y& H" z: Y        }. \5 {0 q& _/ {. Z; s- A" k( N
        free(BIN_Byte);
- k/ V- s/ A' [/ @6 U' {}
$ ]. b2 f0 l& U, m9 R//---------------------------------------------------------------------------$ n2 H# {( A4 J8 [
void __fastcall TForm1::FormDestroy(TObject *Sender)) B9 m/ e+ ?: W9 ~9 q5 ]
{
! C9 \0 B* g) z0 ?* w6 d. g        if (BIN_Byte!=NULL)
; j" I4 J. C/ B' f1 {( s             free(BIN_Byte);) @/ \% J  h  [- \( ?4 S
}* C) g3 F( f; G* Y5 Q0 V
//---------------------------------------------------------------------------
0 X  A& t5 Z7 }* r- G</P>( @2 h* Z* R# U0 Q+ Z! R
<>free(sPath); free(stream);此两句也有问题。</P>
; I5 @: y+ V, B) j* j<>char sPath[MAXPATH];不需要释放;</P>" E3 E4 f) J  L  \1 Y1 Q
<>fclose(stream)已经起到free(stream)的作用</P>) {/ H7 P2 L2 a% G% X
[此贴子已经被作者于2004-6-15 15:16:40编辑过]
回复

使用道具 举报

kenneth        

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

fastpost qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-31 17:45 , Processed in 0.185604 second(s), 82 queries .

回顶部