QQ登录

只需要一步,快速开始

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

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

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

10

主题

1

听众

98

积分

升级  97.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2004-6-9 11:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
新建一個專案,在窗口Form1上加兩個按鈕,一個OpenDialog1,一個SaveDialog1;- J3 Q( V* k% i: |2 h  [
//---------------------------------------------------------------------------( D2 _' Y: v" |8 V& m

4 d3 W) j) G1 ~  j7 ~! J#include <vcl.h>
  y8 v3 C. W7 x' J& X6 ]#pragma hdrstop
" {) d! ?+ W8 \1 s& {0 q( F: u  X  }% w6 S$ G0 ]
#include "Unit1.h"" m) [1 s5 E8 J' ^% C: @
#include <fstream.h>3 H  [0 @! H& l
#include <dir.h>9 b3 N5 S2 f. x
#include <sys\stat.h>/ e9 M0 |& ]5 b0 q) Q3 \
#include <malloc.h>
7 o& B) t" H! K0 W/ N//---------------------------------------------------------------------------0 I5 r: S3 A8 K0 o, m, I3 U; |
#pragma package(smart_init)
- ^: R3 D, O& p9 t# S9 @) @, L#pragma resource "*.dfm"
$ s/ U; _, l, j! W- A0 G: t0 ~4 gTForm1 *Form1;3 w0 R$ z! P% m- i5 l. y9 [
        unsigned char *BIN_Byte;+ I" i+ C' L+ ?" ~; n* i. ~
        long BIN_Byte_Len;
) o( M  B# J3 Z& T- E//---------------------------------------------------------------------------
  C1 v3 N% m* K( n0 Y/ w) o__fastcall TForm1::TForm1(TComponent* Owner); \& }* e* N; i  [
        : TForm(Owner)
" b' M0 K% z$ u{
0 V; F5 ?# o% o% [* ?- B}3 F& E+ U3 l  G$ ~' h$ M
//---------------------------------------------------------------------------  J9 \3 |/ M0 w
void __fastcall TForm1::Button1Click(TObject *Sender)/ J  w& c9 F! E1 s6 e- ?' F' ~( q9 y
{9 B5 r8 x8 R1 ~9 j- l1 L  W* M
        char sPath[MAXPATH];
3 f! ^5 t; ^  m1 W$ `1 W        struct stat statbuf;! |( z# K# Q6 c) w- ~$ u
        FILE *stream;
6 _; s3 y0 _6 `- g; K
8 _! A- t! R+ X# w% B0 Y0 ^        getcwd(sPath,sizeof(sPath));
  m$ v! i8 W7 N  D        OpenDialog1->InitialDir=sPath;5 \5 O) `9 [' d4 Z8 g4 p' j- e
        OpenDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";+ ^. b- C1 I( R: S' \" Q& h2 s, Q
        OpenDialog1->FileName="fileFrom.BIN";
) e3 u1 T% l1 H        if(OpenDialog1->Execute())
. T& r  S- M) w; K2 `1 A        {
# {" V" W6 R+ T                strcpy(sPath,OpenDialog1->FileName.c_str());
+ |0 \0 ?4 [5 ?) x  }$ n2 E! |                stream=fopen(sPath,"rb");
3 e+ ]/ _2 @. n* t- v# T                fstat(fileno(stream),&statbuf);! S, B; C0 O7 d# b7 j' G# q1 W
                BIN_Byte_Len=statbuf.st_size;* Y6 l3 |, ?- ?" e1 j
                BIN_Byte=(unsigned char *)alloca(BIN_Byte_Len);
/ C( S8 b* d: o' |                for(int i=0;i<BIN_Byte_Len;i++)0 j/ l# n+ W* F8 I+ g0 N7 C) K1 X
                        fscanf(stream,"%c",&BIN_Byte); //read file
: V5 [" V  F" K% p2 O; e5 Q                fclose(stream);  c' |  @9 U3 U( E6 X/ e
        }& N8 @, j" h% z( u" ?% k
        free(sPath);) n) L6 n, K  q: N
        free(stream);
. i; Z1 ?( `1 g! Z}
0 n5 C' V% ?3 X' {& ?, j1 ]8 i//---------------------------------------------------------------------------
6 v+ ]1 A$ Y# h2 \4 tvoid __fastcall TForm1::Button2Click(TObject *Sender)( U3 ?; t) ]7 w/ ?' p) v
{
2 I: V5 c' s" |% I& s        char sPath[MAXPATH];4 C* e1 Y9 E$ E5 a$ I1 f
        FILE *stream;
! x: J3 w, E5 F* h        getcwd(sPath,sizeof(sPath));//App.Path
  \, _+ @% ]. b        strcat(sPath,"\\");
" ^. w/ ?  H- d7 ]! C# h        SaveDialog1->InitialDir = sPath;
0 Q* g( @; C" N+ X* k) O- r- D        SaveDialog1->Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";& n& }! h# R# b+ l
        SaveDialog1->FileName="fileTo.BIN";
1 ^- a: U; u  X* S9 V* ]& ~8 ~, ?+ j        if(SaveDialog1->Execute())
% Q2 J5 y$ s( c& @* G- D        {4 P  U. H* X- b& x" Z5 [
                strcpy(sPath , SaveDialog1->FileName.c_str());6 M! ?/ f. n. C. c9 @. m9 R% W
                stream=fopen(sPath,"wb");
$ A  l- ?5 V/ @( P. u                for(int i=0;i<BIN_Byte_Len;i++): u: s3 N4 f4 ?
                        fprintf(stream,"%c",&BIN_Byte);  //save file
+ M0 b6 W& y; v# \2 }. R- c                fclose(stream);
1 I9 X- A* f$ O0 o; s        }
& q& q5 X# H$ n/ l" J9 b        free(sPath);0 K! i+ C4 q* n; r: a: I
        free(stream);
) `: o0 M) r$ i+ d1 g& k$ x4 z}
. t7 Y% W; z+ z: U- q//---------------------------------------------------------------------------
. J+ W& q8 x7 E: x0 Kvoid __fastcall TForm1::FormDestroy(TObject *Sender)! \3 Z" e6 x" E2 B& {0 F& e, K
{
! x- s, u& }- ~1 w" t        free(BIN_Byte);
6 L1 E, T1 b0 A7 ^}
7 t5 w! i4 Y/ P0 K//---------------------------------------------------------------------------
7 ~) f2 H( |8 W- z3 C8 v  @# L" K+ i9 S2 V3 H3 r
打開一個檔案,再另存為另一個新檔案
2 L' q. i; b6 P9 Y5 s+ z% M* |結果兩個檔案內容一樣# c3 U8 d% F' i/ i( R
順序不一樣了9 }: M  W/ j' [0 ~( D! h3 o% P
檔案前面一段內容跑到結尾去了
! }$ g4 h. \7 v, a6 T就像下面的情況: t: j* i2 \# ]; B0 B& g
原來檔案內容:ABCDEFG: @# Z9 `9 i% @; r- ~; F+ O: T  t
新檔案內容:CDEFGAB
7 j3 R% W4 n" Z2 E0 V老大救救小弟哦
/ P1 K% q3 ~( J1 m* [3 F4 j
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>
9 z$ S3 D1 B4 `- r7 X% X& |<>alloca:</P>, Q# Z0 d. s' ^7 s
<>Allocates temporary stack space.</P>( x$ Z" ^& T; R3 b: C& M" A; E
<>alloca allocates size bytes on the stack; the allocated space is automatically freed up when the calling function exits.</P>
/ U% X1 H. a+ [<>malloc:</P>
/ I% J: O6 v* ]8 @7 ]0 y0 P<>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>. k) P  d1 I# c% \$ w- d! 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>" X9 g7 C% L, z/ X4 V  e
) n* n3 @/ J4 {( L: r  p# x
<>以下是改后的代码</P>
( H- k; t9 O$ V  O9 A( p8 y% A<>//---------------------------------------------------------------------------</P>  W/ _/ H6 ]1 [3 g( M" G% Z7 w: H
<>#include &lt;vcl.h&gt;
: t, l# P: o( r1 S; Q+ g, M4 M3 m  n+ j$ A#pragma hdrstop</P>" I% S0 S" E8 _% ^& m' S/ n
<>#include "Unit1.h"7 s7 ?! O& x3 O, G+ p
#include &lt;fstream.h&gt;) ~2 m/ U! u) Q6 v  V$ ^
#include &lt;dir.h&gt;
+ w/ \! ~0 |# g9 |8 h- t#include &lt;sys\stat.h&gt;( u) Z0 Z* g- k6 k+ S+ h+ R( O
#include &lt;malloc.h&gt;
4 B( k  l% Q9 \7 I//---------------------------------------------------------------------------! W5 h5 @/ u& }* I3 }8 w7 J0 v
#pragma package(smart_init)
1 c) q6 z4 X% O; i/ l, i4 c7 a#pragma resource "*.dfm"& k, }! M8 q+ V& I3 j( q/ S$ K) Y
TForm1 *Form1;
* h( v% R1 O9 e3 g' u        unsigned char *BIN_Byte;, w" ], s" s( h
        long BIN_Byte_Len;/ D6 J% ?% d5 L% m, v7 V& ~3 }: Y& V
//---------------------------------------------------------------------------
% A/ N" J+ X3 {2 F__fastcall TForm1::TForm1(TComponent* Owner)
( `" U, c- G+ c" t) v1 r        : TForm(Owner)
. _$ k( u" Y0 ^{
9 \/ r3 @9 `* \/ D6 K}# E9 I& d/ r* K
//---------------------------------------------------------------------------: \0 @9 T5 M2 }! B2 }- n
void __fastcall TForm1::Button1Click(TObject *Sender)- t& X, K7 v9 t) h
{/ W7 p8 K0 D* S8 D8 m+ {
        char sPath[MAXPATH];3 M* V, v, c! h" o
        struct stat statbuf;
. O: f# W% h4 A* v& d) U! v        FILE *stream;</P>
3 I3 J8 U; i; q3 I, l<>        getcwd(sPath,sizeof(sPath));
+ @1 _- T" X6 s) \8 X& ^* c        OpenDialog1-&gt;InitialDir=sPath;: z+ v+ U: N0 ~; e1 S, Y$ A! z) c
        OpenDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";. @6 C+ `1 o; ~$ H) Q
        OpenDialog1-&gt;FileName="fileFrom.BIN";8 s/ e; a( r* P% o. L
        if(OpenDialog1-&gt;Execute())
6 R, u! I" d9 K( g        {  q8 {# z: e& V3 F- e2 p
                strcpy(sPath,OpenDialog1-&gt;FileName.c_str());
% x9 w/ |  G0 D3 ^                stream=fopen(sPath,"rb");
! B+ y$ G" }3 `. |) n( I                fstat(fileno(stream),&amp;statbuf);9 |8 N( Z4 A# {3 w2 a( e& ]( ^
                BIN_Byte_Len=statbuf.st_size;& j9 }, R9 \/ \3 t/ p
                BIN_Byte=(unsigned char *)malloc(BIN_Byte_Len);$ w: P, o5 h& p4 l
                for(int i=0;i&lt;BIN_Byte_Len;i++)8 |6 ]3 G6 R1 ?  t2 Q, R
                        fscanf(stream,"%c",&amp;BIN_Byte); //read file
5 H) B$ O# m" a/ T3 F" c/ ?                fclose(stream);! m* _) @- G. i7 P  M
        }
2 K$ ]$ g- V4 q6 X! t5 ?6 ~}( Y; R  U. i1 x: r. Q
//---------------------------------------------------------------------------3 m1 x+ v% W4 m' C8 v
void __fastcall TForm1::Button2Click(TObject *Sender)
& T. A$ c+ Y3 u% c! B{5 s+ v) l/ ^1 s; ~& _2 N
        char sPath[MAXPATH];
" q7 f7 ~: D' `        FILE *stream;; N. u' v+ h0 Y3 P1 G  o1 z
        getcwd(sPath,sizeof(sPath));//App.Path3 ^7 l+ ~% L5 |& q8 v1 L0 F
        strcat(sPath,"\\");$ b2 ]* H) i& L3 A7 g  n
        SaveDialog1-&gt;InitialDir = sPath;6 x6 G0 }! e% ?3 C1 P) T
        SaveDialog1-&gt;Filter = "BIN_File(*.BIN)|*.BIN|All_File(*.*)|*.*";$ B+ B* F6 O. P& E2 Y0 T/ {
        SaveDialog1-&gt;FileName="fileTo.BIN";
% c! \, H  O# q: I; ]1 l/ Z        if(SaveDialog1-&gt;Execute())
. ^! c6 ]! E  C; h, o1 M        {
# v; a& _- C. f1 F                strcpy(sPath , SaveDialog1-&gt;FileName.c_str());8 Q, R8 y% ~# t- Q. m
                stream=fopen(sPath,"wb");
  T8 c; O+ v# h* t) j, z( z. n                for(int i=0;i&lt;BIN_Byte_Len;i++)
2 u1 H0 m9 A: `2 D9 V                        fprintf(stream,"%c",BIN_Byte);  //save file- n7 ~2 y% R$ a  ~9 y8 T2 ?
                fclose(stream);/ \. J- p+ r& h5 b8 _0 S3 U2 [
        }
7 r; h% Q3 P; t9 o9 y: j/ |6 H4 Z        free(BIN_Byte);
0 k  ^/ y/ h; m9 {+ `! n8 J}
& k1 U& b: ?: a/ v- \8 ]$ f9 E//---------------------------------------------------------------------------* O1 z  E2 m) o3 w7 P  `$ D8 t3 U
void __fastcall TForm1::FormDestroy(TObject *Sender)
; v6 f+ S' k! _$ r3 [, V{9 x8 h" X: }: b) B9 y) _! P7 z. Z
        if (BIN_Byte!=NULL)3 A0 _; t, u0 x5 L% h
             free(BIN_Byte);
7 s8 }  b- w3 e5 E8 M}
# z* c, H' L8 J' v//---------------------------------------------------------------------------3 x* M( e9 H2 ~
</P>1 e2 M/ Q, a, `' H, L
<>free(sPath); free(stream);此两句也有问题。</P>
: E* }- t3 b+ W/ v<>char sPath[MAXPATH];不需要释放;</P>
8 @5 n5 g# @  y5 h, p! [& [; U<>fclose(stream)已经起到free(stream)的作用</P>7 e) V, o9 P5 X" e/ u$ \; w
[此贴子已经被作者于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-10-30 07:48 , Processed in 0.475680 second(s), 82 queries .

回顶部