fork download
  1. //【初心者歓迎】C/C++室 Ver.80【環境依存OK】
  2. //http://t...content-available-to-author-only...h.net/test/read.cgi/tech/1348161305/458
  3. //
  4. //458 名前:デフォルトの名無しさん[sage] 投稿日:2012/10/26(金) 18:46:38.87
  5. //ofstreamまたはifstreamでファイルが開けなかった時にcloseする必要ってありますか?
  6. //
  7. //// 例
  8. //ofstream ofs("test.txt");
  9. //if (ofs.fail()) {
  10. //  ofs.close(); // ←これ
  11. //}
  12.  
  13. //Example for VS2010C++
  14. #include <fstream>
  15. #include <ios>
  16. #include <iostream>
  17.  
  18. #include <Shlwapi.h>
  19. #pragma comment(lib, "Shlwapi.lib")
  20.  
  21. void FileExist(const char fname[])
  22. {
  23. bool fileexists;
  24.  
  25. fileexists = (::PathFileExistsA(fname) == TRUE ? true : false);
  26. std::cout << fname << " " << (fileexists ? "" : "does not ") << "exist" << (fileexists ? "s" : "") << "." << std::endl;
  27.  
  28. return;
  29. }
  30.  
  31. void ShowStates(std::ifstream *ifs)
  32. {
  33. std::cout << "\tifs.is_open() is " << ifs->is_open() << "." << std::endl;
  34. std::cout << "\tstate of bits: " << ((ifs->rdstate() & std::ios_base::eofbit) == std::ios_base::eofbit ? "eof" : " ");
  35. std::cout << " " << ((ifs->rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "fail" : " ");
  36. std::cout << " " << ((ifs->rdstate() & std::ios_base::badbit) == std::ios_base::badbit ? "bad" : " ");
  37. std::cout << " " << (ifs->rdstate() == std::ios_base::goodbit ? "good" : "") << std::endl;
  38. std::cout << "\tifs.fail() is " << ifs->fail() << "." << std::endl;
  39.  
  40. return;
  41. }
  42.  
  43. int main(void)
  44. {
  45. const char ifname1[] = "main.cpp";
  46. const char ifname2[] = "xxx";
  47. const char ifname3[] = "yyy";
  48.  
  49. FileExist(ifname1);
  50. FileExist(ifname2);
  51. FileExist(ifname3);
  52. std::cout << std::endl;
  53.  
  54. std::cout << std::boolalpha;
  55. std::cout << "Example 1:" << std::endl;
  56. {
  57. std::ifstream ifs(ifname1);
  58. std::cout << "Create std::ifstream ifs with \"" << ifname1 << "\"." << std::endl;
  59. ShowStates(&ifs);
  60. ifs.open(ifname2);
  61. std::cout << "ifs.open(" << ifname2 << ") is " << ((ifs.rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "Fail" : "Success") << "." << std::endl;
  62. ShowStates(&ifs);
  63. ifs.clear();
  64. std::cout << "Clear state of bits." << std::endl;
  65. ShowStates(&ifs);
  66. ifs.close();
  67. std::cout << "ifs.close() is " << ((ifs.rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "Fail" : "Success") << "." << std::endl;
  68. ShowStates(&ifs);
  69. }
  70. std::cout << std::endl;
  71. std::cout << "Example 2:" << std::endl;
  72. {
  73. std::ifstream ifs(ifname1);
  74. std::cout << "Create std::ifstream ifs with \"" << ifname1 << "\"." << std::endl;
  75. ShowStates(&ifs);
  76. std::cout << "ifs.rdbuf()->open(" << ifname2 << ") is " << (ifs.rdbuf()->open(ifname2, std::ios_base::in) == NULL ? "False" : "Success") << "." << std::endl;
  77. ShowStates(&ifs);
  78. std::cout << "ifs.rdbuf()->close() is " << (ifs.rdbuf()->close() == NULL ? "Fail" : "Success") << "." << std::endl;
  79. ShowStates(&ifs);
  80. }
  81. std::cout << std::endl;
  82. std::cout << "Example 3:" << std::endl;
  83. {
  84. std::ifstream ifs(ifname1);
  85. std::cout << "Create std::ifstream ifs with \"" << ifname1 << "\"." << std::endl;
  86. ShowStates(&ifs);
  87. ifs.close();
  88. std::cout << "ifs.close() is " << ((ifs.rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "Fail" : "Success") << "." << std::endl;
  89. ShowStates(&ifs);
  90. ifs.open(ifname2);
  91. std::cout << "ifs.open(" << ifname2 << ") is " << ((ifs.rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "Fail" : "Success") << "." << std::endl;
  92. ShowStates(&ifs);
  93. ifs.close();
  94. std::cout << "ifs.close() is " << ((ifs.rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "Fail" : "Success") << "." << std::endl;
  95. ShowStates(&ifs);
  96. }
  97. std::cout << std::endl;
  98. std::cout << "Example 4:" << std::endl;
  99. {
  100. std::ifstream ifs(ifname1);
  101. std::cout << "Create std::ifstream ifs with \"" << ifname1 << "\"." << std::endl;
  102. ShowStates(&ifs);
  103. std::cout << "ifs.rdbuf()->close() is " << (ifs.rdbuf()->close() == NULL ? "Fail" : "Success") << "." << std::endl;
  104. ShowStates(&ifs);
  105. std::cout << "ifs.rdbuf()->open(" << ifname2 << ") is " << (ifs.rdbuf()->open(ifname2, std::ios_base::in) == NULL ? "False" : "Success") << "." << std::endl;
  106. ShowStates(&ifs);
  107. std::cout << "ifs.rdbuf()->close() is " << (ifs.rdbuf()->close() == NULL ? "Fail" : "Success") << "." << std::endl;
  108. ShowStates(&ifs);
  109. }
  110. std::cout << std::endl;
  111. std::cout << "Example 5:" << std::endl;
  112. {
  113. std::ifstream ifs(ifname3);
  114. std::cout << "Create std::ifstream ifs with \"" << ifname3 << "\"." << std::endl;
  115. ShowStates(&ifs);
  116. ifs.clear();
  117. std::cout << "Clear state of bits." << std::endl;
  118. ShowStates(&ifs);
  119. ifs.close();
  120. std::cout << "ifs.close() is " << ((ifs.rdstate() & std::ios_base::failbit) == std::ios_base::failbit ? "Fail" : "Success") << "." << std::endl;
  121. ShowStates(&ifs);
  122. }
  123. std::cout << std::endl;
  124. std::cout << "Example 6:" << std::endl;
  125. {
  126. std::ifstream ifs(ifname3);
  127. std::cout << "Create std::ifstream ifs with \"" << ifname3 << "\"." << std::endl;
  128. ShowStates(&ifs);
  129. std::cout << "ifs.rdbuf()->close() is " << (ifs.rdbuf()->close() == NULL ? "Fail" : "Success") << "." << std::endl;
  130. ShowStates(&ifs);
  131. }
  132. return 0;
  133. }
  134.  
  135. //OUTPUT
  136. //==========
  137.  
  138. //main.cpp exists.
  139. //xxx exists.
  140. //yyy does not exist.
  141. //
  142. //Example 1:
  143. //Create std::ifstream ifs with "main.cpp".
  144. // ifs.is_open() is true.
  145. // state of bits: good
  146. // ifs.fail() is false.
  147. //ifs.open(xxx) is Fail.
  148. // ifs.is_open() is true.
  149. // state of bits: fail
  150. // ifs.fail() is true.
  151. //Clear state of bits.
  152. // ifs.is_open() is true.
  153. // state of bits: good
  154. // ifs.fail() is false.
  155. //ifs.close() is Success.
  156. // ifs.is_open() is false.
  157. // state of bits: good
  158. // ifs.fail() is false.
  159. //
  160. //Example 2:
  161. //Create std::ifstream ifs with "main.cpp".
  162. // ifs.is_open() is true.
  163. // state of bits: good
  164. // ifs.fail() is false.
  165. //ifs.rdbuf()->open(xxx) is False.
  166. // ifs.is_open() is true.
  167. // state of bits: good
  168. // ifs.fail() is false.
  169. //ifs.rdbuf()->close() is Success.
  170. // ifs.is_open() is false.
  171. // state of bits: good
  172. // ifs.fail() is false.
  173. //
  174. //Example 3:
  175. //Create std::ifstream ifs with "main.cpp".
  176. // ifs.is_open() is true.
  177. // state of bits: good
  178. // ifs.fail() is false.
  179. //ifs.close() is Success.
  180. // ifs.is_open() is false.
  181. // state of bits: good
  182. // ifs.fail() is false.
  183. //ifs.open(xxx) is Success.
  184. // ifs.is_open() is true.
  185. // state of bits: good
  186. // ifs.fail() is false.
  187. //ifs.close() is Success.
  188. // ifs.is_open() is false.
  189. // state of bits: good
  190. // ifs.fail() is false.
  191. //
  192. //Example 4:
  193. //Create std::ifstream ifs with "main.cpp".
  194. // ifs.is_open() is true.
  195. // state of bits: good
  196. // ifs.fail() is false.
  197. //ifs.rdbuf()->close() is Success.
  198. // ifs.is_open() is false.
  199. // state of bits: good
  200. // ifs.fail() is false.
  201. //ifs.rdbuf()->open(xxx) is Success.
  202. // ifs.is_open() is true.
  203. // state of bits: good
  204. // ifs.fail() is false.
  205. //ifs.rdbuf()->close() is Success.
  206. // ifs.is_open() is false.
  207. // state of bits: good
  208. // ifs.fail() is false.
  209. //
  210. //Example 5:
  211. //Create std::ifstream ifs with "yyy".
  212. // ifs.is_open() is false.
  213. // state of bits: fail
  214. // ifs.fail() is true.
  215. //Clear state of bits.
  216. // ifs.is_open() is false.
  217. // state of bits: good
  218. // ifs.fail() is false.
  219. //ifs.close() is Fail.
  220. // ifs.is_open() is false.
  221. // state of bits: fail
  222. // ifs.fail() is true.
  223. //
  224. //Example 6:
  225. //Create std::ifstream ifs with "yyy".
  226. // ifs.is_open() is false.
  227. // state of bits: fail
  228. // ifs.fail() is true.
  229. //ifs.rdbuf()->close() is Fail.
  230. // ifs.is_open() is false.
  231. // state of bits: fail
  232. // ifs.fail() is true.
  233.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty