望远镜系统监控+软件升级
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

fileOperation.c 3.0 KiB

před 1 rokem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include"fileOperation.h"
  2. long g_fileSize; //ļСȫֱʼΪ
  3. //long g_fileSize = 11152;
  4. char *g_fileBuf; //ļ
  5. char g_recvBuf[1024]; //ļС
  6. //int main()
  7. bool readFile(struct MsgHeader* pmsg)
  8. {
  9. FILE* read = fopen(pmsg->fileInfo.fileName, "rb"); //ļָ룬rbΪƷʽ
  10. if (!read) //ȡΪ
  11. {
  12. perror("ļȡʧ\n");
  13. printf("Ҳ[%s]ļ...\n", pmsg->fileInfo.fileName);
  14. struct MsgHeader msg = { .msgID = MSG_OPENFILE_FAILD };
  15. return false;
  16. }
  17. //ȡļСλֽ
  18. fseek(read, 0, SEEK_END); //ļλָƶ
  19. g_fileSize = ftell(read); //ftellȡǰļλָ
  20. fseek(read, 0, SEEK_SET); //ƶͷ
  21. printf("filesize:%d\n", g_fileSize);
  22. //ڴ
  23. g_fileBuf = calloc(g_fileSize, sizeof(char)); //callocڴȫʼΪ0
  24. if (!g_fileBuf)
  25. {
  26. return false;
  27. }
  28. //ļڴ
  29. fread(g_fileBuf, sizeof(char), g_fileSize, read);
  30. fclose(read);
  31. return true;
  32. }
  33. bool sendFile(SOCKET s, struct MsgHeader* pmsg)
  34. {
  35. readFile(pmsg); //ȥserverٶļ
  36. //ļƺʹСͻ
  37. struct MsgHeader msg = { .msgID = MSG_FILESIZE,.fileInfo.fileSize = g_fileSize };
  38. //fileName = C:\Users\Katherine\Desktop\TyporaHotKey.ahk
  39. char tfname[200] = { 0 }, text[100]; //tfnameļTyporaHotKeytext׺.ahk
  40. _splitpath(pmsg->fileInfo.fileName, NULL, NULL, tfname, text); //ָ·
  41. strcat(tfname, text); //ƴΪTyporaHotKey.ahktfname
  42. strcpy(msg.fileInfo.fileName, tfname); //msg.fileInfo.fileName
  43. //int ret1 = send(s, //
  44. int ret2 = send(s, (char*)&msg, sizeof(struct MsgHeader), 0); //С
  45. //ļg_fileBufҪӦò
  46. int ret = send(s, g_fileBuf, msg.fileInfo.fileSize,0); //ʵʷ͵ļСret
  47. if (ret == SOCKET_ERROR)
  48. {
  49. err("sendFile");
  50. return false;
  51. }
  52. printf("ͳɹ(%d)Byte\n", ret);
  53. return true;
  54. }
  55. void downloadFileName(SOCKET serfd)
  56. {
  57. char fileName[1024] = "ãǸڵ̩ɽ~";
  58. gets_s(fileName, 1023); //ȡҪصļ
  59. struct MsgHeader file = { .msgID = MSG_FILENAME };
  60. strcpy(file.fileInfo.fileName, fileName);
  61. send(serfd, (char*)&file, sizeof(struct MsgHeader), 0);
  62. }
  63. bool recvFile(SOCKET s)
  64. {
  65. //ļС
  66. recv(s, g_recvBuf, 1023, 0);
  67. struct MsgHeader* msg = (struct MsgHeader*)g_recvBuf;
  68. printf("յļСΪ(%d)Byte\n", msg->fileInfo.fileSize);
  69. //strcpy(msg->fileInfo.fileName, pmsg->fileInfo.fileName);
  70. //ļʱҪڴ棡
  71. if (g_fileBuf == NULL)
  72. {
  73. g_fileBuf = calloc(msg->fileInfo.fileSize, sizeof(char));
  74. if (!g_fileBuf)
  75. {
  76. return false;
  77. }
  78. }
  79. int ret = recv(s, g_fileBuf, msg->fileInfo.fileSize, 0);
  80. //int ret = recv(s, g_fileBuf, 1023, 0);
  81. if (ret == 0)
  82. {
  83. printf("...\n");
  84. }
  85. else if (ret < 0)
  86. {
  87. err("recv");
  88. }
  89. saveFile(msg);
  90. return true;
  91. }
  92. bool saveFile(struct MsgHeader* pmsg)
  93. {
  94. FILE* write = fopen(&(pmsg->fileInfo.fileName), "wb"); //ļָ룬wbֻд
  95. if (!write) //ȡΪ
  96. {
  97. perror("ļȡʧ\n");
  98. return false;
  99. }
  100. fwrite(g_fileBuf, sizeof(char), pmsg->fileInfo.fileSize, write);
  101. fclose(write);
  102. return true;
  103. }