<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;">Dear list, </div>
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;"><br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;">Since the `truncate` function is not working properly on Windows (see ?truncate), and CollapsABEL depends on such a function, I tried to implement it with c++ (to be integrated into R with
 Rcpp): </div>
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;"><br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;"><br>
</div>
<div>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><SDKDDKVer.h></p>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><windows.h></p>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><tlhelp32.h></p>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><tchar.h></p>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><stdio.h></p>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><iostream></p>
<p style="color: rgb(4, 51, 255); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>#include<span style="color: #000000">
</span><span style="color: #b4261a"><string></span></p>
<p style="color: rgb(180, 38, 26); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span><span style="color: #0433ff">#include</span><span style="color: #000000">
</span><sstream></p>
<p style="color: rgb(4, 51, 255); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>#include<span style="color: #000000">
</span><span style="color: #b4261a"><Rcpp.h></span></p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="color: rgb(4, 51, 255); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>using<span style="color: #000000">
</span>namespace<span style="color: #000000"> Rcpp;</span></p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="color: rgb(4, 51, 255); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>typedef<span style="color: #000000">
</span>const<span style="color: #000000"> </span>char<span style="color: #000000">* LPCTSTR; </span></p>
<p style="color: rgb(4, 51, 255); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>typedef<span style="color: #000000">
</span>const<span style="color: #000000"> </span>void<span style="color: #000000">* LPCVOID;</span></p>
<p style="color: rgb(4, 51, 255); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>typedef<span style="color: #000000">
</span>unsigned<span style="color: #000000"> </span>long<span style="color: #000000"> DWORD;</span></p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="color: rgb(0, 143, 0); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>// [[Rcpp::export]]</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">void</span> append(LPCTSTR filename, LPCVOID buf, DWORD writeSize) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>LARGE_INTEGER size;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>size.QuadPart = 0;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>HANDLE fh = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">if</span> (fh == INVALID_HANDLE_VALUE) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream error;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>error <<
<span style="color: #b4261a">"Failed to created file: "</span> << filename << <span style="color: #b4261a">
"\nError: "</span> << GetLastError();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">throw</span> error.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>GetFileSizeEx(fh, &size);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>SetFilePointerEx(fh, size, NULL, FILE_BEGIN);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">if</span> (WriteFile(fh, buf, writeSize, NULL, NULL) == 0) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream error;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>error <<
<span style="color: #b4261a">"Failed to write file: "</span> << filename << <span style="color: #b4261a">
"\nError: "</span> << GetLastError();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">throw</span> error.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>CloseHandle(fh);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="color: rgb(0, 143, 0); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>// [[Rcpp::export]]</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::string readTail(LPCTSTR filename,  DWORD readSize) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">char</span> *buf =
<span style="color: #b4261a">""</span>;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>LARGE_INTEGER size;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>size.QuadPart = 0;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>HANDLE fh = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">if</span> (fh == INVALID_HANDLE_VALUE) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream error;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>error <<
<span style="color: #b4261a">"Failed to created file: "</span> << filename << <span style="color: #b4261a">
"\nError: "</span> << GetLastError();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">throw</span> error.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>GetFileSizeEx(fh, &size);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>size.QuadPart -= readSize;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>SetFilePointerEx(fh, size, NULL, FILE_BEGIN);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">if</span> (ReadFile(fh, buf, readSize, NULL, NULL) == 0) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream error;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>error <<
<span style="color: #b4261a">"Failed to read file: "</span> << filename << <span style="color: #b4261a">
"\nError: "</span> << GetLastError();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">throw</span> error.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>CloseHandle(fh);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::string s(buf);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="color: rgb(0, 143, 0); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>// [[Rcpp::export]]</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::string hello(std::string name) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream s; </p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>s <<
<span style="color: #b4261a">"Hello, "</span> << name << <span style="color: #b4261a">
"\n"</span>;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">return</span> s.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="color: rgb(0, 143, 0); font-family: Consolas; margin: 0px;"><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"></span></span>// [[Rcpp::export]]</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">void</span> truncateTail(LPCTSTR filename,
<span style="color: #0433ff">long</span> truncateSize) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>LARGE_INTEGER size;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>size.QuadPart = 0;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>HANDLE fh = CreateFile(filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">if</span> (fh == INVALID_HANDLE_VALUE) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream error;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>error <<
<span style="color: #b4261a">"Failed to created file: "</span> << filename << <span style="color: #b4261a">
"\nError: "</span> << GetLastError();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">throw</span> error.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>GetFileSizeEx(fh, &size);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>size.QuadPart -= truncateSize;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>SetFilePointerEx(fh, size, NULL, FILE_BEGIN);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">if</span> (SetEndOfFile(fh) == 0) {</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>std::ostringstream error;</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>error <<
<span style="color: #b4261a">"Failed to set end of file: "</span> << filename << <span style="color: #b4261a">
"\nError: "</span> << GetLastError();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span><span style="color: #0433ff">throw</span> error.str();</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>CloseHandle(fh);</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px;"><span class="Apple-tab-span" style="white-space:pre"></span>}</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
<br>
</p>
<p style="margin: 0px; min-height: 11px;">A quick import with `sourceCpp` seems to compile this just fine, but when I call `truncateTail("C:/kaiyin/kybig.out", 3L)`, I get this:</p>
<p style="margin: 0px; min-height: 11px;"><br>
</p>
<p style="margin: 0px; min-height: 11px;"><br>
</p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
Error in truncateTail("C:/kaiyin/kybig.out", 3L) : </p>
<p style="color: rgb(0, 0, 0); font-family: Consolas; margin: 0px; min-height: 11px;">
  c++ exception (unknown reason)</p>
</div>
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;"><br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Consolas, sans-serif;">
<div>
<p dir="ltr">Any suggestions?</p>
<p dir="ltr"><br>
</p>
<p dir="ltr">Best regards,</p>
<p dir="ltr">Kaiyin ZHONG<br>
------------------<br>
FMB, Erasmus MC<br>
<a href="http://kspace.co.vu">http://kspace.co.vu</a> <br>
<a href="mailto:k.zhong@erasmusmc.nl" target="_blank" style="color: purple;">k.zhong@erasmusmc.nl</a><br>
<a href="mailto:kindlychung@gmail.com" target="_blank" style="color: purple;">kindlychung@gmail.com</a></p>
</div>
<div><br>
</div>
<div><br>
</div>
</div>
</body>
</html>