Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Không thể ghi file nhị phân trong C++

  1. #1
    Ngày gia nhập
    04 2012
    Bài viết
    8

    Mặc định Không thể ghi file nhị phân trong C++

    Mấy bạn cho mình hỏi tại sao không thể viết được thông tin lên file nhị phân, mặc dù void read thì hoạt động tốt còn ghi thông tin thì không ra, chỉ ra toàn mã ASCII.
    Dưới đây là toàn bỗ code mình đã viết, không biết còn chổ nào chưa hợp lý không, mong các bạn giúp đở, cảm ơn nhiều !
    Code:
    #include "stdio.h"
    #include "string.h"
    #include "conio.h"
    #include "iostream.h"
    #include "stdlib.h"
    #include "windows.h"
    
    struct nhanvien
    {
    	char hoten[50];
    	int tuoi;
    };
    void write(FILE *f,nhanvien nv[],int k)
    {
    	
    	f=fopen("E:\\test.dat","wb+");
    	if(f==NULL) 
    	{
    		cout<<"Cannot create file";
    		exit(1);
    
    	}
    	fflush(stdin);
    	//void *s;
    	//s=new nhanvien[k];
    	for(int i=0;i<k;i++)
    	{
    		fwrite(&nv[i],sizeof(nhanvien),1,f);
    	}
    	//delete s;
    	fclose(f);
    }
    void read(FILE *f,int k)
    {
    	fflush(stdout);
    	f=fopen("E:\test.dat","rb+");
    	if(f==NULL) 
    	{
    		cout<<"Cannot open file";
    		//exit(1);
    	}
    	void *s;
    	s=new nhanvien[k];
    	for(int i=0;i<k;i++)
    	{
    		fread(s,sizeof(nhanvien),1,f);
    		printf("%s",s);
    	}
    	delete s;
    	fclose(f);
    }
    int main()
    {
    	FILE *f;
    	unsigned int k;	
    	struct nhanvien *nv;
    	cout<<"Nhap so luong nhan vien can nhap thong tin: ";cin>>k;
    	cout<<"\n";	
    	nv= new nhanvien[k];
    	for(int i=0;i<k;i++)
    	{
    		fflush(stdin);
    		cout<<"Nhap ten nguoi thu "<<i+1<<" : ";		
    		gets(nv[i].hoten);
    		cout<<"Nhap tuoi: ";
    		cin>>nv[i].tuoi;
    	}
    	delete nv;
    	write(f,nv,k);
    	read(f,k);
    	getch();
    	//DeleteFile("E:\test.dat");
    }
    Đã được chỉnh sửa lần cuối bởi inofeeling : 21-04-2012 lúc 08:37 PM.
    My Bloghttp://infofeeling.blogspot.com
    I ♥ C Forum

  2. #2
    Ngày gia nhập
    09 2011
    Bài viết
    7

    Bạn thử để lệnh fclose(f) trong void write vào hàm main đi!

  3. #3
    Ngày gia nhập
    04 2012
    Bài viết
    8

    Ý bạn là sao, mình nghĩ đã đóng file lại rồi mà, mình còn ngu trong cái này lắm , các bạn chỉ rỏ xíu nha, với lại đừng chỉ mình dùng namespace mình chưa hiểu nó đâu, cảm ơn mọi người giúp đở !
    My Bloghttp://infofeeling.blogspot.com
    I ♥ C Forum

  4. #4
    Ngày gia nhập
    07 2009
    Nơi ở
    Thị trấn Lâm Thao - Phú Thọ
    Bài viết
    86

    bó tay luôn
    mình cũng không hiểu bạn định làm cái gì đi nữa
    mục đích bạn xây dựng hàm đọc file read để làm gì ????
    câu lệnh mở file bị sai >> f=fopen("E:\test.dat","rb+");
    sau khi nhập xong dữ liệu bạn lại đi >>> delete nv;
    sau đó mới ghi vào file thì nv chứa cái gì nữa mà đòi ghi
    ghi bằng niềm tin à
    cố lên bạn nhé
    học thêm lần nữa cho chắc ăn nhé
    Ngô Hùng Cường
    Birthday: 14/4/1986 - Cư ngụ: Thị trấn Lâm Thao - Phú Thọ
    kidteam@gmail.com
    Yahoo ID: cuong_dhbk2004
    0989696971
    0915696971

  5. #5
    Ngày gia nhập
    04 2012
    Bài viết
    8

    cái delete nv; là thu hồi bộ nhớ mà chứ mình đâu phải xóa hết dữ liệu đâu, để mình thử xem, cảm ơn bạn nhe
    oh, dc rồi nhưng sao nó không ghi luôn tuổi nhỉ, khó hiểu quá
    Đã được chỉnh sửa lần cuối bởi inofeeling : 22-04-2012 lúc 12:05 AM.
    My Bloghttp://infofeeling.blogspot.com
    I ♥ C Forum

  6. #6
    Ngày gia nhập
    07 2009
    Nơi ở
    Thị trấn Lâm Thao - Phú Thọ
    Bài viết
    86

    Mặc định Không thể ghi file nhị phân trong C++

    bạn mở ghi file theo mode nhị phân mà
    nếu bạn mở lại file bạn tạo ra bằng notepad thì tất nhiên là không nhìn thấy tuổi rồi
    bạn cần phân biệt file nhị phân và file văn bản nhé
    Ngô Hùng Cường
    Birthday: 14/4/1986 - Cư ngụ: Thị trấn Lâm Thao - Phú Thọ
    kidteam@gmail.com
    Yahoo ID: cuong_dhbk2004
    0989696971
    0915696971

  7. #7
    Ngày gia nhập
    04 2012
    Bài viết
    8

    Mình đã làm được rồi hehe:
    Nhờ một số gợi ý của các bạn mình đã có dòng code hoàn chỉnh và trong sáng ()
    Code:
    #include "stdio.h"
    #include "string.h"
    #include "conio.h"
    #include "iostream.h"
    #include "stdlib.h"
    #include "windows.h"
    
    struct nhanvien
    {
     char hoten[50];
     char tuoi[2];
    };
    void write(FILE *f,nhanvien nv[],int k)
    {
    
     f=fopen("E:\\test.dat","wb");
     if(f==NULL) 
     {
      cout<<"Cannot create file";
      exit(1);
     }
     fflush(stdin);
     for(int i=0;i<k;i++)
     {
      fwrite(&nv[i].hoten,sizeof(nhanvien),1,f);
      fwrite(&nv[i].tuoi,sizeof(nhanvien),1,f);
     }
     fclose(f);
    }
    void read(FILE *f,int k)
    {
     fflush(stdout);
     f=fopen("E:\\test.dat","rb");
     if(f==NULL) 
     {
      cout<<"Cannot open file";
      exit(1);
     }
     void *s;
     s=new nhanvien[k];
     cout<<"Thong tin nhan vien ban da nhap la\n";
     cout<<"\tHo Ten\t\tTuoi\n";
     for(int i=0;i<k;i++)
     {
      fread(s,sizeof(nhanvien),1,f);
      printf("%d.\t %s\t\t  ",i+1,s);
      fread(s,sizeof(nhanvien),1,f);
      printf("%s  \n",s);
     }
     fclose(f);
    }
    int main()
    {
            FILE *f;
     unsigned int k; 
     struct nhanvien *nv;
     cout<<"Nhap so luong nhan vien can nhap thong tin: ";cin>>k;
     cout<<"\n"; 
     nv= new nhanvien[k];
     for(int i=0;i<k;i++)
     {
      fflush(stdin);
      cout<<"Nhap ten nguoi thu "<<i+1<<" : ";  
      gets(nv[i].hoten);
      cout<<"Nhap tuoi: ";
      gets(nv[i].tuoi);
     }
     write(f,nv,k);
     read(f,k);
    // delete("E:\\test.dat");
     getch();
    }
    Cảm ơn mọi người đã giúp đở !
    Đã được chỉnh sửa lần cuối bởi inofeeling : 22-04-2012 lúc 12:44 PM.
    My Bloghttp://infofeeling.blogspot.com
    I ♥ C Forum

  8. #8
    Ngày gia nhập
    04 2012
    Bài viết
    8

    Các bạn cho mình hỏi cũng về file nhị phân là tại sao ghi rồi nó lại fread không đúng, mình không biết fwrite có vấn đề không nửa. Các bạn giúp giùm.
    p.s: fread từ file txt mà mình edit bằng notepad thì nó lại đọc đúng, chắc fwrite có vấn đề mà không biết vấn đề gì !?

    Để dễ dàng cho các bạn hình dung vấn đề của mình xin post ảnh cho các bạn xem:
    Nhập


    nhưng khi fread

    Code:
    #include "stdio.h"
    #include "string.h"
    #include "conio.h"
    #include "iostream.h"
    #include "stdlib.h"
    #include "windows.h"
    
    struct hanghoa
    {
    	char mahang[10];
    	char tenhang[100];
    	char dvt[10];
    	float dongia;
    	float thanhtien;
    	float chietkhau;
    	float doanhthu;
    	int soluong;
    };
    void detail(hanghoa hh[],int n)
    {
    	cout<<"Nhap Thong Tin Chi Tiet Hoa Don Can Xuat\n";
    	hh=new hanghoa[n];
    	for(int i=0;i<n;i++)
    	{
    		cout<<"Nhap So Luong: ";
    		cin>>hh[i].soluong;
    		hh[i].thanhtien=hh[i].soluong*hh[i].dongia;
    		hh[i].chietkhau=hh[i].thanhtien*0.05;
    		hh[i].doanhthu=hh[i].thanhtien-hh[i].chietkhau;
    	}
    }
    void adm_detail(hanghoa hh[],int n)
    {
    	cout<<"Nhap Thong Tin Chi Tiet Hang Hoa\n";
    	fflush(stdin);
    	hh=new hanghoa[n];
    	for(int i=0;i<n;i++)
    	{
    		fflush(stdin);
    		cout<<"Nhap Ma Hang: ";
    		gets(hh[i].mahang);
    		cout<<"Nhap Ten Hang: ";fflush(stdin);
    		gets(hh[i].tenhang);
    		cout<<"Nhap Don Vi Tinh: ";	fflush(stdin);
    		gets(hh[i].dvt);fflush(stdin);
    		cout<<"Nhap Don Gia: ";
    		cin>>hh[i].dongia;
    	}
    }
    void write(FILE *f,hanghoa hh[],int k)
    {
     f=fopen("E:\\QLHH.txt","wt");
     if(f==NULL) 
     {
      cout<<"Cannot create file";
      exit(1);
     }
     fflush(stdin);
     for(int i=0;i<k;i++)
     {
      fwrite(&hh[i].mahang,sizeof(hanghoa),1,f);
      fwrite(&hh[i].tenhang,sizeof(hanghoa),1,f);
      fwrite(&hh[i].dvt,sizeof(hanghoa),1,f);
      fwrite(&hh[i].dongia,sizeof(hanghoa),1,f);
      //fprintf(f,"%s %s %s %s",hh[i].mahang,hh[i].tenhang,hh[i].dvt,hh[i].dongia);
     }
     fclose(f);
    }
    void read(FILE *f,int k)
    {
     fflush(stdout);
     f=fopen("E:\\QLHH.txt","rt");
     if(f==NULL) 
     {
      cout<<"Cannot open file";
      exit(1);
     }
     char d[100];
     void *s;
     s=new hanghoa[k];
     cout<<"\tMa Hang\t\tTen Hang\t\tDVT\t\tDonGia\n";
     for(int i=0;i<k;i++)
     {
      fread(s,sizeof(hanghoa),1,f);
      printf("%d.\t %s\t\t  ",i+1,s);//Ma Hang
      fread(s,sizeof(hanghoa),1,f);
      printf("%s  \t",s);//Ten Hang
      fread(s,sizeof(hanghoa),1,f);
      printf("%s  \t",s);//DVT
      fread(s,sizeof(hanghoa),1,f);
      printf("%f  \n",s);//Don Gia
     }
     fclose(f);
    }
    int main()
    {
    	hanghoa *hh;
    	FILE *f;
    	int n=1;
    	system("cls");
    	cout<<"\t\t\t     Welcome to VT Passion Shop\n";
    	cout<<"\t\t\t   http:\\infofeeling.blogspot.com\n";
    	for(int s=0;s<80;s++)
    		printf("%c",3);	
    	cout<<"Admin CPanel";
    	cout<<"\nXin nhap so luong hang hoa can quan ly: ";cin>>n;	
    	adm_detail(hh,n);	
    	cout<<"Please wait, System is creating database file !";
    	write(f,hh,n);
    	system("cls");
    	cout<<"\t\t\t     Welcome to VT Passion Shop\n";
    	cout<<"\t\t\t   http:\\infofeeling.blogspot.com\n";
    	for(int s=0;s<80;s++)
    		printf("%c",3);	
    	cout<<"\nDanh Muc San Pham Trong Shop\n";
    	read(f,n);
    	cout<<"Nhap vao so luong hang hoa\n";
    	getch();
    }
    Đã được chỉnh sửa lần cuối bởi inofeeling : 22-04-2012 lúc 03:41 PM.
    My Bloghttp://infofeeling.blogspot.com
    I ♥ C Forum

Các đề tài tương tự

  1. Trả lời: 3
    Bài viết cuối: 10-04-2013, 08:06 AM
  2. Giới thiệu cách chuyển File Ảnh thành file Video trong download proshow gold
    Gửi bởi thuhu0900x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 03-07-2012, 03:54 AM
  3. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  4. File server để dùng ajax trong visual2010 là file gì, xử lý kết nối với SQLserver như thế nào?
    Gửi bởi lenamshenlong trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 9
    Bài viết cuối: 26-05-2011, 05:14 PM
  5. Làm sao để open file bằng cách double click vào file trong windows explorer?
    Gửi bởi Batchuoc_09 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 18-07-2010, 01:12 PM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn