<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>C++ fstream problems</title>
		<link>http://www.allegro.cc/forums/view/591021</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 16 Apr 2007 23:50:27 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi everyone,<br />If you look in the class constructor for Pdisk, there is a function that checks to see if a file exists, if it doesn&#39;t, then it creates it.  And so far that seems to work perfectly. <br />At the end of the code, in the function &quot;putblock&quot; , I try almost the exact same thing, yet it&#39;s unable to find/open the file.  This is my attempt to debug what I really wanted it to do, which is to open it, put something into the file, then close it.  </p><p>Could somebody tell me what I&#39;m doing wrong and/or show me how do it right?</p><p>The project is due Monday so I&#39;m kindof in a bind.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/*</span></td></tr><tr><td class="number">2</td><td><span class="c"></span></td></tr><tr><td class="number">3</td><td><span class="c">#include&lt;fstream&gt;</span></td></tr><tr><td class="number">4</td><td><span class="c">#include&lt;string&gt;</span></td></tr><tr><td class="number">5</td><td><span class="c">using namespace std;</span></td></tr><tr><td class="number">6</td><td><span class="c"></span></td></tr><tr><td class="number">7</td><td><span class="c">Class Pdisk</span></td></tr><tr><td class="number">8</td><td><span class="c">{</span></td></tr><tr><td class="number">9</td><td><span class="c">Public:</span></td></tr><tr><td class="number">10</td><td><span class="c">Pdisk(int numberofblocks, int blocksize, string&amp; diskname)</span></td></tr><tr><td class="number">11</td><td><span class="c">int getblock(int blocknumber, string buffer);</span></td></tr><tr><td class="number">12</td><td><span class="c">int putblock(int blocknumber, sting buffer);</span></td></tr><tr><td class="number">13</td><td><span class="c">Private:</span></td></tr><tr><td class="number">14</td><td><span class="c">string diskname;</span></td></tr><tr><td class="number">15</td><td><span class="c">int numberofblocks;</span></td></tr><tr><td class="number">16</td><td><span class="c">int blocksize;</span></td></tr><tr><td class="number">17</td><td><span class="c">};</span></td></tr><tr><td class="number">18</td><td><span class="c"></span></td></tr><tr><td class="number">19</td><td><span class="c">*/</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="p">#include"pdisk.h"</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>Pdisk::Pdisk<span class="k2">(</span><span class="k1">int</span> numberofblocks, <span class="k1">int</span> blocksize, string<span class="k3">&amp;</span> diskname<span class="k2">)</span></td></tr><tr><td class="number">24</td><td><span class="k2">{</span></td></tr><tr><td class="number">25</td><td><span class="k1">int</span> countsize <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> </td></tr><tr><td class="number">26</td><td><span class="k1">int</span> countblocks <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span> <span class="c">//set to 2 to balance things out.</span></td></tr><tr><td class="number">27</td><td>fstream checkfile<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>checkfile.open<span class="k2">(</span>diskname.c_str<span class="k2">(</span><span class="k2">)</span>, ios::in<span class="k3">|</span>ios::out<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="k1">bool</span> there_be_no_file <span class="k3">=</span> checkfile.fail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>checkfile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k1">if</span><span class="k2">(</span>there_be_no_file <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td> <span class="k2">{</span></td></tr><tr><td class="number">33</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"does this happen?"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  <span class="c">//obtain file information from boot sector and set global variables to that</span></td></tr><tr><td class="number">35</td><td>  <span class="c">//just in case some idiot didn't pass the correct values</span></td></tr><tr><td class="number">36</td><td>  </td></tr><tr><td class="number">37</td><td> <span class="k2">}</span></td></tr><tr><td class="number">38</td><td><span class="k1">else</span></td></tr><tr><td class="number">39</td><td> <span class="k2">{</span></td></tr><tr><td class="number">40</td><td> cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"or does this happen?"</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td> ofstream iofile<span class="k2">(</span>diskname.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td> iofile<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"+"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>numberofblocks<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"+"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>blocksize<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"+"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>diskname<span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">43</td><td> <span class="k1">while</span><span class="k2">(</span>countblocks <span class="k3">&lt;</span><span class="k3">=</span> numberofblocks<span class="k2">)</span></td></tr><tr><td class="number">44</td><td> <span class="k2">{</span></td></tr><tr><td class="number">45</td><td>  <span class="k1">while</span><span class="k2">(</span>countsize <span class="k3">&lt;</span><span class="k3">=</span> blocksize<span class="k2">)</span></td></tr><tr><td class="number">46</td><td>   <span class="k2">{</span></td></tr><tr><td class="number">47</td><td>    iofile<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"+"</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    countsize<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">50</td><td>   iofile<span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">51</td><td>   countsize <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>   countblocks<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>   cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"please tell me this happens"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">54</td><td> <span class="k2">}</span></td></tr><tr><td class="number">55</td><td> iofile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td> <span class="k2">}</span></td></tr><tr><td class="number">57</td><td><span class="c">//check if file already exists, if it doesn't, then create it.</span></td></tr><tr><td class="number">58</td><td><span class="c">//if it does then just use that file</span></td></tr><tr><td class="number">59</td><td><span class="c">//fstream iofile;// name of file is diskname; open file for writting and such</span></td></tr><tr><td class="number">60</td><td><span class="c">//if file doesn't exist, create it with the number of blocks, block size and diskname</span></td></tr><tr><td class="number">61</td><td><span class="k2">}</span></td></tr><tr><td class="number">62</td><td>&#160;</td></tr><tr><td class="number">63</td><td><span class="k1">int</span> Pdisk::getblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string<span class="k3">&amp;</span> buffer<span class="k2">)</span></td></tr><tr><td class="number">64</td><td><span class="k2">{</span></td></tr><tr><td class="number">65</td><td><span class="c">//accepts integer for block number and name of disk and returns value as a string?</span></td></tr><tr><td class="number">66</td><td>ifstream iofile<span class="k2">;</span></td></tr><tr><td class="number">67</td><td>iofile.open<span class="k2">(</span>this-&gt;diskname.c_str<span class="k2">(</span><span class="k2">)</span>, ios::in <span class="k3">|</span> ios::out<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>iofile.seekg<span class="k2">(</span>blocknumber<span class="k3">*</span>blocksize,ios::beg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td><span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>blocksize<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">70</td><td> <span class="k2">{</span></td></tr><tr><td class="number">71</td><td>  </td></tr><tr><td class="number">72</td><td>  iofile&gt;&gt;i<span class="k2">;</span></td></tr><tr><td class="number">73</td><td>  buffer<span class="k3">+</span><span class="k3">=</span>i<span class="k2">;</span></td></tr><tr><td class="number">74</td><td> <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>iofile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td><span class="k2">}</span></td></tr><tr><td class="number">77</td><td>&#160;</td></tr><tr><td class="number">78</td><td><span class="k1">int</span> Pdisk::putblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string buffer<span class="k2">)</span></td></tr><tr><td class="number">79</td><td><span class="k2">{</span></td></tr><tr><td class="number">80</td><td>fstream checkfile<span class="k2">;</span></td></tr><tr><td class="number">81</td><td>checkfile.open<span class="k2">(</span>this-&gt;diskname.c_str<span class="k2">(</span><span class="k2">)</span>, ios::in<span class="k3">|</span>ios::out<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td><span class="k1">bool</span> there_be_no_file <span class="k3">=</span> checkfile.fail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>checkfile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td><span class="k1">if</span><span class="k2">(</span>there_be_no_file <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span></td></tr><tr><td class="number">85</td><td> <span class="k2">{</span></td></tr><tr><td class="number">86</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"unable to open file"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">87</td><td>  <span class="c">//obtain file information from boot sector and set global variables to that</span></td></tr><tr><td class="number">88</td><td>  <span class="c">//just in case some idiot didn't pass the correct values</span></td></tr><tr><td class="number">89</td><td>  </td></tr><tr><td class="number">90</td><td> <span class="k2">}</span></td></tr><tr><td class="number">91</td><td><span class="k1">else</span></td></tr><tr><td class="number">92</td><td> <span class="k2">{</span></td></tr><tr><td class="number">93</td><td> cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"file able to be opened"</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td><span class="k2">}</span></td></tr><tr><td class="number">95</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relay01)</author>
		<pubDate>Sun, 15 Apr 2007 11:04:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Post the code, make sure they are looking in the same folder. And of course make sure you call close(), when you done with each function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adam450)</author>
		<pubDate>Sun, 15 Apr 2007 11:16:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What language is this? Why is the first letter in Class, Private, and Public uppercase? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>I would fail you for lack of spacing, poor formatting, and poor variable names. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Also, post the entire program so we don&#39;t have to write our own implementation to debug it. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> And I think your example is missing a semi-colon after the constructor declaration.
</p><div class="quote_container"><div class="title">relay01 said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>Class Pdisk
<span class="k2">{</span>
Public:
Pdisk<span class="k2">(</span><span class="k1">int</span> numberofblocks, <span class="k1">int</span> blocksize, string<span class="k3">&amp;</span> diskname<span class="k2">)</span> <span class="c">// OH NOES!</span>
<span class="k1">int</span> getblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string buffer<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>

Also I think you&#39;re missing a space in the pdisk.h #include:</p><div class="quote_container"><div class="title">relay01 said:</div><div class="quote"><p>
<span class="source-code"><span class="p">#include"pdisk.h"</span></span>
</p></div></div><p>

Also you named an ofstream object iofile... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><div class="quote_container"><div class="title">relay01 said:</div><div class="quote"><p>
<span class="source-code">ofstream iofile<span class="k2">(</span>diskname.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div></div><p>

You should also declare your variables at the beginning of functions.</p><p>Clean up your code and come back with all of it. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> And if they are in separate files just copy and paste each into it&#39;s own set of code tags. (And format it next time)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sun, 15 Apr 2007 12:31:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>... string<span class="k3">&amp;</span> diskname<span class="k2">)</span>
</pre></div></div><p>
Make this code into:
</p><div class="source-code snippet"><div class="inner"><pre>... <span class="k1">const</span> string<span class="k3">&amp;</span> diskname<span class="k2">)</span>
</pre></div></div><p>

Why are you trying to open files for reading and writing at the same time?  IIRC windows doesn&#39;t support this.</p><div class="source-code snippet"><div class="inner"><pre>ifstream iofile<span class="k2">;</span>
iofile.open<span class="k2">(</span>this-&gt;diskname.c_str<span class="k2">(</span><span class="k2">)</span>, ios::in <span class="k3">|</span> ios::out<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Why are you trying to output using an ifstream?  This is not possible.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Sun, 15 Apr 2007 12:37:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Dustin Dettmer said:</div><div class="quote"><p>
Why are you trying to open files for reading and writing at the same time? IIRC windows doesn&#39;t support this.
</p></div></div><p>

Yes it does... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Yeah, looking again your code is all messed up. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> How about we start with what your class has to do with a disk? <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sun, 15 Apr 2007 12:39:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>&quot;there is a function that checks to see if a file exists, if it doesn&#39;t, then it creates it&quot;</p><p>-When you call ofstream file( &quot;filename.txt&quot;); it already creates that file if its not a file, so why are you checking if its valid? I mean since you dont care cuz you create it anyway if it doesnt exist.</p><p>***IN your constructor for your class, you never set the data member string diskname.<br />So the putblock function, your trying to open a file with the member diskname, but diskname is NULL. </p><p>//yes windows suppports reading and writing. Useful for appending mainly I guess.<br />r  - open for reading<br />w  - open for writing (file need not exist)<br />a  - open for appending (file need not exist)<br />r+ - open for reading and writing, start at beginning<br />w+ - open for reading and writing (overwrite file)<br />a+ - open for reading and writing (append if file exists)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adam450)</author>
		<pubDate>Sun, 15 Apr 2007 12:41:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah ok so it is supported.  But do you actually need to read and write the file at the same time?  Sounds like uneeded complexity if you don&#39;t actually really need it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Sun, 15 Apr 2007 12:49:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>During the time, I got it working. <br />Well. Sortof.</p><p>I apologize to everyone for the lousy code.  Believe it or not, though I technically wrote it, it&#39;s not my code.  A lot of this stuff was copied off the board lectures in my class.  Oh god, what is this guy doing? the whole class implementation in comments on the top is his, the one I&#39;m using actually compiles and works.</p><p>My new problem is with the <br />seekg and seekp functions.  It doesn&#39;t appear to be putting the seekp in the correct place for this function.  Is there once again... a problem with my implimentation</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> Pdisk::putblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string buffer,  string<span class="k3">&amp;</span> diskname, <span class="k1">int</span> blocksize<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>ofstream ofile<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>ofile.open<span class="k2">(</span>diskname.c_str<span class="k2">(</span><span class="k2">)</span>,ios::app<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k1">bool</span> there_be_no_file <span class="k3">=</span> ofile.fail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td><span class="k1">if</span><span class="k2">(</span>there_be_no_file <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td> <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span> blocknumber<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span> blocksize<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  ofile.seekp<span class="k2">(</span>blocknumber<span class="k3">*</span>blocksize,ios::beg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"able to open file"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  ofile<span class="k3">&lt;</span><span class="k3">&lt;</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span>buffer<span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  ofile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span>diskname<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td> <span class="k2">}</span></td></tr><tr><td class="number">19</td><td><span class="k1">else</span></td></tr><tr><td class="number">20</td><td> <span class="k2">{</span></td></tr><tr><td class="number">21</td><td> cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"failed to open file"</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Now, the backstory for the code. &quot;Pdisk&quot; is a class that is supposed to represent a Psuedodisk, or, well, a data disk being represented by a text file.  The project is to implement this. So this is where the number of blocks and block size come from.  This function is supposed to go through the file and put whatever string is passed to it, into the file. </p><p>And just for the purpose of hopefully redeeming myself, here&#39;s MY class declaration.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#define PDISK_H</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="p">#include&lt;fstream&gt;</span></td></tr><tr><td class="number">4</td><td><span class="p">#include&lt;string&gt;</span></td></tr><tr><td class="number">5</td><td><span class="p">#include&lt;iostream&gt;</span></td></tr><tr><td class="number">6</td><td><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="k1">class</span> Pdisk</td></tr><tr><td class="number">10</td><td><span class="k2">{</span></td></tr><tr><td class="number">11</td><td>public:</td></tr><tr><td class="number">12</td><td>Pdisk<span class="k2">(</span><span class="k1">int</span> numberofblocks, <span class="k1">int</span> blocksize, string<span class="k3">&amp;</span> diskname<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k1">int</span> getblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string<span class="k3">&amp;</span> buffer, string<span class="k3">&amp;</span> diskname,<span class="k1">int</span> blocksize<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">int</span> putblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string buffer, string<span class="k3">&amp;</span> diskname,<span class="k1">int</span> blocksize<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>private:</td></tr><tr><td class="number">16</td><td>string diskname<span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k1">int</span> numberofblocks<span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k1">int</span> blocksize<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="p">#endif</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (relay01)</author>
		<pubDate>Sun, 15 Apr 2007 13:56:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1st, I suggest you use gamedev.net. It&#39;s alot wider of use for non-allegro questions.</p><p>2. DO you know what a class does?  you have data members such as blocksize, which you have to instantiate. So there are alot of things wrong. In your constructor:</p><p>Pdisk::Pdisk(int numberofblocks, int blocksize, string&amp; diskname)<br />{<br />}</p><p>change those variable names like such, and of course you need to set the data members. Basically do this and it should work</p><p>Pdisk::Pdisk(int _numberofblocks, int _blocksize, string&amp; _diskname)<br />{<br />numberofblocks = _numberofblocks;<br />blocksize = __blocksize;<br />diskname = _diskname;<br />int countisize = 1;<br />.....the rest of your code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adam450)</author>
		<pubDate>Sun, 15 Apr 2007 14:43:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do that <b><i>OR</i></b>...
</p><div class="source-code snippet"><div class="inner"><pre>Pdisk:Pdisk<span class="k2">(</span><span class="k1">int</span> numberofblocks, <span class="k1">int</span> blocksize, string<span class="k3">&amp;</span> diskname<span class="k2">)</span>
    <span class="k2">:</span> numberofblocks<span class="k2">(</span>numberofblocks<span class="k2">)</span>, blocksize<span class="k2">(</span>blocksize<span class="k2">)</span>, diskname<span class="k2">(</span>diskname<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">int</span> countisize <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
    .....the <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a> of your code.
</pre></div></div><p>

Anyway, back to this putblock function.  Ugh!  This stuff is getting messy..  Ok heres my first pass with observations:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">// You should be doing:</span></td></tr><tr><td class="number">2</td><td><span class="c">//   const string &amp;diskname</span></td></tr><tr><td class="number">3</td><td><span class="c">// Honestly there should never really be a need</span></td></tr><tr><td class="number">4</td><td><span class="c">// to pass in a string via reference.</span></td></tr><tr><td class="number">5</td><td><span class="k1">int</span> Pdisk::putblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string buffer,  string<span class="k3">&amp;</span> diskname, <span class="k1">int</span> blocksize<span class="k2">)</span></td></tr><tr><td class="number">6</td><td><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>ofstream ofile<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="c">// You must pass ios::out in the flags as well as ios::app</span></td></tr><tr><td class="number">11</td><td><span class="c">// But honestly, I don't think you want ios::app</span></td></tr><tr><td class="number">12</td><td>ofile.open<span class="k2">(</span>diskname.c_str<span class="k2">(</span><span class="k2">)</span>,ios::app<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="c">// there_be_no_file is probably a bad name here as</span></td></tr><tr><td class="number">15</td><td><span class="c">// it implies the file could not be opened.  It</span></td></tr><tr><td class="number">16</td><td><span class="c">// actually means the file could not be created.</span></td></tr><tr><td class="number">17</td><td><span class="k1">bool</span> there_be_no_file <span class="k3">=</span> ofile.fail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k1">if</span><span class="k2">(</span>there_be_no_file <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span></td></tr><tr><td class="number">19</td><td> <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span> blocknumber<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span> blocksize<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>  <span class="c">// This does nothing since you passed ios::app to</span></td></tr><tr><td class="number">24</td><td>  <span class="c">// open</span></td></tr><tr><td class="number">25</td><td>  ofile.seekp<span class="k2">(</span>blocknumber<span class="k3">*</span>blocksize,ios::beg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"able to open file"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  ofile<span class="k3">&lt;</span><span class="k3">&lt;</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span>buffer<span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>  ofile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span>diskname<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td> <span class="k2">}</span></td></tr><tr><td class="number">34</td><td><span class="k1">else</span></td></tr><tr><td class="number">35</td><td> <span class="k2">{</span></td></tr><tr><td class="number">36</td><td> cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"failed to open file"</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Alright, now heres my version of the method:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td><span class="k1">int</span> Pdisk::putblock<span class="k2">(</span><span class="k1">int</span> blocknumber, string buffer, <span class="k1">const</span> string<span class="k3">&amp;</span> diskname, <span class="k1">int</span> blocksize<span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>ofstream ofile<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="c">// Flags default to ios::out if we do not specify any</span></td></tr><tr><td class="number">8</td><td>ofile.open<span class="k2">(</span>diskname.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">bool</span> unable_to_open <span class="k3">=</span> ofile.fail<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k1">if</span><span class="k2">(</span>unable_to_open <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span></td></tr><tr><td class="number">12</td><td> <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span> blocknumber<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span> blocksize<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">if</span><span class="k2">(</span>ofile.seekp<span class="k2">(</span>blocknumber<span class="k3">*</span>blocksize,ios::beg<span class="k2">)</span>.fail<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">16</td><td>    cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"File too small to seek to this position.\n"</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">18</td><td>    cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"able to open file"</span><span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  ofile<span class="k3">&lt;</span><span class="k3">&lt;</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span>buffer<span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  ofile.close<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  cout<span class="k3">&lt;</span><span class="k3">&lt;</span>diskname<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td> <span class="k2">}</span></td></tr><tr><td class="number">25</td><td><span class="k1">else</span></td></tr><tr><td class="number">26</td><td> <span class="k2">{</span></td></tr><tr><td class="number">27</td><td> cout<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"failed to open file"</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Mon, 16 Apr 2007 23:50:27 +0000</pubDate>
	</item>
</rss>
