freed liefert 0

D

djtraumwelt

Foren As
Ich habe eine Datei geöffnet mit:
Code:
fp=fopen(filename,"rb");
danach versuche ich aus der datei zu lesen mit:
Code:
bytes=fread(buffer,1,1000,fp);
fp ist nicht 0 und auch nicht -1, aber bytes ist immer 0. Warum?

Hier nochmal der komplette Code (ist aber Win):
Code:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock2.h>

HINSTANCE hInst;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
DWORD WINAPI serverfunc (LPVOID);
WSADATA wsa;
HANDLE Hserver;
HWND glob;
int endsig=0;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int nCmdShow) {
 MSG msg;
 BOOL bRet;
 hInst=hInstance;
 HWND hWnd;
 int xwin=0;
 int ywin=0;

 char winclass[] = "Fensterklasse";
 WNDCLASS wc;

 wc.style = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc = WndProc;
 wc.cbClsExtra = 0;
 wc.cbWndExtra = 0;
 wc.hInstance = hInstance;
 wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
 wc.hCursor = LoadCursor (NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
 wc.lpszMenuName = NULL;
 wc.lpszClassName = winclass;

 RegisterClass (&wc);

 xwin=GetSystemMetrics(SM_CXSCREEN);
 ywin=GetSystemMetrics(SM_CYSCREEN);
 xwin /= 2;
 xwin -= 200; //400 Breit
 ywin /= 2;
 ywin -= 50; //100 Hoch

 hWnd = CreateWindow (winclass, "WG-Com 1=Alex 2=Ricky 3=Boris", WS_OVERLAPPEDWINDOW, xwin, ywin, 400, 100, NULL, NULL, hInstance, NULL);
 glob=hWnd;

 ShowWindow(hWnd, nCmdShow);
 UpdateWindow(hWnd);

 while( (bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
 HDC hdc;
 PAINTSTRUCT ps;
 RECT crect, wrect;
 int xdiff;
 int ydiff;
 char rmsg[100];
 SOCKET sock;
 SOCKADDR_IN addr;
 OPENFILENAME ofn;
 char filter[100];
 char filename[260];
 char filetitle[200];
 char buffer[1024];
 FILE *fp;
 size_t bytes;

 if (msg == WM_CREATE) {
  GetWindowRect(hWnd,&wrect);
  GetClientRect(hWnd,&crect);
  xdiff=(wrect.right - wrect.left) - crect.right;
  ydiff=(wrect.bottom - wrect.top) - crect.bottom;
  wrect.left=wrect.left - (xdiff / 2);
  wrect.top=wrect.top - (ydiff / 2);
  xdiff += 400;
  ydiff += 100;
  MoveWindow(hWnd,wrect.left,wrect.top,xdiff,ydiff,TRUE);

  WSAStartup(MAKEWORD(2,0),&wsa);
  Hserver=CreateThread(NULL,0,serverfunc,NULL,0,NULL);
 }
 if (msg == WM_KEYDOWN) {
  if (wParam >= 49 && wParam <= 51) {
   ofn.lStructSize=sizeof(OPENFILENAME);
   ofn.hwndOwner=hWnd;
   filter[0]='*';
   filter[1]=0;
   filter[2]='*';
   filter[3]='.';
   filter[4]='*';
   filter[5]=0;
   filter[6]=0;
   ofn.lpstrFilter=filter;
   ofn.lpstrCustomFilter=NULL;
   ofn.nFilterIndex=0;
   filename[0] = 0;
   ofn.lpstrFile=filename;
   ofn.nMaxFile=260;
   ofn.lpstrFileTitle=filetitle;
   ofn.nMaxFileTitle=200;
   ofn.lpstrInitialDir=NULL;
   ofn.lpstrTitle=NULL;
   ofn.Flags=OFN_EXPLORER;
   ofn.lpstrDefExt=NULL;
   GetOpenFileName(&ofn);

   memset(&addr,0,sizeof(SOCKADDR_IN));
   addr.sin_family=AF_INET;
   addr.sin_port=htons(5800);
   if (wParam == 49)
    addr.sin_addr.s_addr=inet_addr("192.168.2.101");
   if (wParam == 50)
    addr.sin_addr.s_addr=inet_addr("192.168.2.102");
   if (wParam == 51)
    addr.sin_addr.s_addr=inet_addr("192.168.2.100");
   sock=socket(AF_INET,SOCK_STREAM,0);
   if (connect(sock,(SOCKADDR*)&addr,sizeof(SOCKADDR))==SOCKET_ERROR) {
    MessageBox(hWnd,"Konnte nicht connecten.","Error",MB_OK);
    closesocket(sock);
    return 0;
   }
   send(sock,filetitle,200,0);
   recv(sock,rmsg,3,0);
   fp=fopen(filename,"rb");
sprintf(rmsg,"%d",fp);
MessageBox(hWnd,rmsg,"fp",MB_OK);
   while(1) {
    bytes=fread(buffer,1,1000,fp);
    //send(sock,buffer,1000,0);
sprintf(rmsg,"%d bytes read",bytes),
MessageBox(hWnd,rmsg,"Filename",MB_OK);
   if (bytes==0)
    break;
   }
   fclose(fp);
   closesocket(sock);
  }
 }
 if (msg == WM_PAINT) {
   hdc=BeginPaint(hWnd,&ps);
   EndPaint(hWnd,&ps);
   return 0;
 }
 if (msg == WM_CLOSE) {
  endsig=1;
  WSACleanup();
 }
 if (msg == WM_DESTROY) {
  PostQuitMessage(0);
  return 0;
 }

 return DefWindowProc(hWnd,msg,wParam,lParam);
}

DWORD WINAPI serverfunc (LPVOID var) {
 SOCKET acceptsock, consock;
 SOCKADDR_IN addr;
 char buffer[1024];
 FILE *fp;
 int bytes;
 acceptsock=socket(AF_INET,SOCK_STREAM,0);
 memset(&addr,0,sizeof(SOCKADDR_IN));
 addr.sin_family=AF_INET;
 addr.sin_port=htons(5800);
 addr.sin_addr.s_addr=ADDR_ANY;
 bind(acceptsock,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
 while(endsig==0) {
  listen(acceptsock,10);
  consock=accept(acceptsock,NULL,NULL);
  if (consock >= 1) {
   recv(consock,buffer,1023,0);
   fp=fopen(buffer,"wb");
   sprintf(buffer,"OK");
   send(consock,buffer,3,0);
   while(bytes=recv(consock,buffer,1023,0) >= 1) {
    fwrite(buffer,1,bytes,fp);
   }
   fclose(fp);
   closesocket(consock);
  }
 }
 closesocket(acceptsock);
 ExitThread(0);
 return 0;
}
 
fp ist nicht 0 und auch nicht -1, aber bytes ist immer 0. Warum?
Vielleicht weil die Datei leer ist?
Vielleicht weil "filename" auf etwas ungültiges zeigt?

Beim nächsten Mal bitte den Quellcode auf die sinnvollen Bestandteil (zB. nur die betreffende Funktion) kürzen!

Gruß
 
die Datei ist nicht leer und filename kann nicht auf was ungültiges Zeigen, weil fp größer 1 ist.
 
Ne, hab ich noch nicht versucht, ich gehe davon aus, dass es sich um einen error handelt.

-edit-

Habs mal versucht und es handelt sich nicht um einen error sondern um eof. Warum eof?
 
Zuletzt bearbeitet:
Weil in der Datei vielleicht nichts steht? Ist sie ein Link?

Grüße, Blender3D
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

C HTTP request

Rollei Mini Wifi Camcorder

[PHP] Autologin-Funktion

popen

Zurück
Oben