Xファイル内に記載されているファイル名を配列に格納し、それを基にfopen_sでファイルを開きたいのですが、ファイルエラーになってしまって、ネットでも調べてみても分からなかったので、質問させていただきました。
Xファイル
↑Xファイル
erro:22はネットで調べた結果、[無効な式数]ということでした。
直接配列内に描画結果で出たファイル名を格納した場合は正常にファイルを開くことができました。
C++
1char filename[18][BUF_MAX] = { 2 "Amiku1.bmp", 3 "sepangmiku_skin.bmp", 4 "Amiku1.bmp", 5 "Amiku1.bmp", 6 "Amiku1.bmp", 7 "Amiku2.bmp", 8 "Amiku1.bmp", 9 "Amiku2.bmp", 10 "2ddream.bmp", 11 "2ddream.bmp", 12 "2ddream.bmp", 13 "2ddream.bmp", 14 "01.bmp", 15 "2ddream.bmp", 16 "2ddream.bmp" 17};
C++
1#include <stdio.h> 2#include <stdlib.h> 3 4#include "glut.h" 5#include "glm/glm.hpp" 6 7#include "drawObj.h" 8 9int txtcount = 0; 10char FileCommand[FILE_MAX][BUF_MAX] = { 0 }; 11char FileName[FILE_MAX][BUF_MAX] = { 0 }; 12char ReadFile[FILE_MAX][BUF_MAX] = { 0 }; 13 14void drawBegin(glm::ivec2 _windowSize) { 15 glPushMatrix(); 16 glMatrixMode(GL_PROJECTION); 17 glLoadIdentity(); 18 19 gluPerspective(30.0, (double)_windowSize.x / _windowSize.y, 1.0, 100.0); 20 21 glMatrixMode(GL_MODELVIEW); 22 glLoadIdentity(); 23} 24 25void loadObj() { 26 FILE* fobj; 27 fopen_s(&fobj, "OBJ//mikuobjx.txt", "r"); 28 if (fobj == nullptr) { 29 printf("file erro\n"); 30 return; 31 } 32 printf("openned file\n"); 33 34 int fCndCont = 0; 35 bool fileNameCount = false; 36 37 char buf[BUF_MAX] = { 0 }; 38 while (fgets(buf, BUF_MAX, fobj) != NULL) { 39 char* subBuf = buf; 40 41 /*------------------------------------------------------テクスチャ名取得------------------------------------------------------*/ 42 //GetFileCommand 43 if (strstr(buf, "Material ") != NULL) { 44 int i = 0; 45 for (; *subBuf != 0x7b; subBuf++) { 46 if (*subBuf == 0x20) { 47 subBuf++; 48 for (; *subBuf != 0x20; subBuf++) { 49 FileCommand[fCndCont][i] = *subBuf; 50 i++; 51 } 52 break; 53 } 54 } 55 //printf("%d:%s\n", fCndCont, FileCommand[fCndCont]); 56 fCndCont++; 57 } 58 59 //GetFileName 60 if (strstr(buf, "TextureFilename") != NULL) { 61 fileNameCount = true; 62 continue; 63 } 64 if (fileNameCount == true) { 65 int i = 0; 66 for (; *subBuf != 0x3b; subBuf++) { 67 if (*subBuf == 0x22) { 68 for (; *subBuf != 0x3b; subBuf++) { 69 FileName[fCndCont-1][i] = *subBuf; 70 i++; 71 } 72 break; 73 } 74 } 75 fileNameCount = false; 76 } 77 } 78 /*for (int i = 0; i < fCndCont; i++) { 79 printf("%s:%s\n", FileCommand[i], FileName[i]); 80 }*/ 81 82 int first = 0; 83 int count = 0; 84 bool filecont = true; 85 86 for (int i = 0; i < fCndCont; i++) { 87 for (int k = 0; k < fCndCont; k++) { 88 first = 0; 89 for (; FileName[k][first] != NULL; first++) { 90 if (FileName[i][first] == ReadFile[k][first]) 91 count++; 92 } 93 if (first == 0) { 94 continue; 95 } 96 if (count == first) { 97 filecont = false; 98 } 99 count = 0; 100 } 101 if (filecont == true) { 102 for (int m = 0; FileName[i][m]!=NULL; m++) { 103 ReadFile[txtcount][m] = FileName[i][m]; 104 } 105 txtcount++; 106 } 107 filecont = true; 108 } 109 //printf("txtcount:%d\n", txtcount); 110 /*for (int i = 0; i < txtcount; i++) { 111 printf("ReadFile %d:%s\n",i, ReadFile[i]); 112 }*/ 113 114 fclose(fobj); 115} 116 117void loadTxt() { 118 for (int i = 0; i < txtcount; i++) { 119 printf("ReadFile %d:%s\n", i, ReadFile[i]); 120 FILE* ftxt; 121 errno_t erro; 122 erro = fopen_s(&ftxt, ReadFile[0], "rb"); 123 if (ftxt == nullptr) { 124 printf("file erro\n"); 125 printf("erro:%d\n", erro); 126 continue; 127 } 128 printf("openned file\n"); 129 130 fclose(ftxt); 131 } 132}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/11 13:02 編集
2020/04/12 00:32
2020/04/12 03:53
2020/04/12 04:01
2020/04/12 05:00
2020/04/12 05:06
2020/04/12 05:13
2020/04/12 05:55 編集
2020/04/12 06:34