我使用node-crontab来运行脚本.fs.writeFile在第一次循环运行时覆盖,但在此之后附加数据.我已经尝试在写入之前删除该文件但是正在执行相同操作,第一次删除它但在后续运行中开始追加.我该怎么办?
这是脚本:我省略了一些环境变量......
var jobId = crontab.scheduleJob('* * * * *', function() {
//Gettting system date and adding leading zeros when are single digits. I need this to build the get request with date filters.
var d = new Date();
var nday = d.getDate();
var nmonth = d.getMonth();
var nhour = d.getHours();
var nmin = d.getMinutes();
var nfullyear = d.getFullYear();
if (nday < 10) {
nday = '0' + nday;
};
var nmin = nmin - 1;
if (nmin < 10) …Run Code Online (Sandbox Code Playgroud) 这是一个使用WinAPI的WriteFile(在Microsoft Visual C++ 2008 Express中编译)的"Hello world"程序:
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t str[] = L"Hello world";
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if(out && out!=INVALID_HANDLE_VALUE)
{
WriteFile(out, str, sizeof(str), NULL, NULL);
CloseHandle(out);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果在控制台窗口中执行,它会愉快地迎接世界.但是,如果您尝试重定向其标准输出,请参阅
hello.exe > output.txt
Run Code Online (Sandbox Code Playgroud)
程序在WriteFile中崩溃(NULL指针异常).尽管如此,output.txt仍然存在并且包含完整的正确输出.
崩溃时的调用堆栈:
KernelBase.dll!_WriteFile@20() + 0x75 bytes
kernel32.dll!_WriteFileImplementation@20() + 0x4e bytes
srgprc2.exe!wmain(int argc=1, wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++
Run Code Online (Sandbox Code Playgroud)
消息:"srgprc2.exe中0x75ce85ea(KernelBase.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00000000."
这里发生了什么?谢谢!
错误代码如下所示:
{ Error: ENOENT: no such file or directory, open 'sad' errno: -2, code: 'ENOENT', syscall: 'open', path: 'sad' }
Run Code Online (Sandbox Code Playgroud)
其中“sad”是我想写入的文件名,它不存在。
代码如下所示:
fs.writeFile(filename, JSON_string, { flag: 'w' }, function(err){
if(err){
return console.error(err);
}
return JSON_string;
});
Run Code Online (Sandbox Code Playgroud)
还有其他类似的问题,但它们的路径都是错误的,以/开头或不以/开头,我只想在运行这个node.js应用程序的根目录上写一个文件(它也在这个目录中用npm初始化...)。
运行
sudo node server4.js
Run Code Online (Sandbox Code Playgroud)
也不行。将标志更改为 w+ 或 wx 或其他什么都无济于事。如果文件存在,代码有效。
节点 v9+。
我需要使用 writeFile() 函数。
我试图将大量数据写入常量内存中的文件.
import qualified Data.ByteString.Lazy as B
{- Creates and writes num grids of dimensions aa x aa -}
writeGrids :: Int -> Int -> IO ()
writeGrids num aa = do
rng <- newPureMT
let (grids,shuffleds) = createGrids rng aa
createDirectoryIfMissing True "data/grids/"
B.writeFile (gridFileName num aa)
(encode (take num grids))
B.writeFile (shuffledFileName num aa)
(encode (take num shuffleds))
Run Code Online (Sandbox Code Playgroud)
然而,这消耗了与大小成比例的内存num.我知道这createGrids是一个足够懒惰的函数,因为我通过将它error "not lazy enough"(如Haskell wiki在此建议的那样)附加到它返回的列表的末尾并且没有引发错误来测试它.take是一个懒惰的函数,在中定义Data.List.encode也是一个定义的惰性函数Data.Binary. …
我正在尝试将我的JSON对象写入服务器上的.json文件.我现在这样做的方式是:
JavaScript的:
function createJsonFile() {
var jsonObject = {
"metros" : [],
"routes" : []
};
// write cities to JSON Object
for ( var index = 0; index < graph.getVerticies().length; index++) {
jsonObject.metros[index] = JSON.stringify(graph.getVertex(index).getData());
}
// write routes to JSON Object
for ( var index = 0; index < graph.getEdges().length; index++) {
jsonObject.routes[index] = JSON.stringify(graph.getEdge(index));
}
// some jQuery to write to file
$.ajax({
type : "POST",
url : "json.php",
dataType : 'json',
data : {
json : …Run Code Online (Sandbox Code Playgroud) 我正在设计一个将时间序列数据写入文件的系统.数据是8个字节的块,分为两个4字节部分,时间和有效负载.
根据MSDN,WriteFile函数是原子的(http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx),如果写入的数据小于扇区的大小.
由于文件只包含这些块(文件没有"结构",因此无法重建损坏的文件),一个接一个地添加,因此整个块或者没有任何内容写入文件是至关重要的.一直.
所以问题是,我是否正确地理解了,无论在实际调用writefile期间发生了什么,一个小于扇区的写文件总是完全写入磁盘或根本不写入?
我试图在常量内存中读取和写入很多整数.我已经想出了如何将内存写入内存,但还没弄清楚如何将它们读回来.
import Control.Lens (zoom)
import System.IO (IOMode(..), withFile)
import Pipes
import qualified Pipes.Prelude as P
import qualified Pipes.ByteString as PB
import qualified Pipes.Parse as P
import qualified Pipes.Binary as P
intStream :: Monad m => Proxy x' x () Int m b
intStream = go (0 :: Int) where
go i = yield i >> go (i + 1)
decoder :: Monad m => Int -> P.Parser P.ByteString m [Int]
decoder n = zoom (P.decoded . P.splitAt n) P.drawAll
main …Run Code Online (Sandbox Code Playgroud) 阅读this question和this question后,我试图将列表(mylist)的每个元素写在文本文件(text.txt)的换行符上。
因此,例如,列表
mylist = ['a', 'b', 'ccc', 'dd', 'eeee', 'f', 'ggg']
Run Code Online (Sandbox Code Playgroud)
应当在书面text.txt像这样
a
b
ccc
dd
eeee
f
ggg
Run Code Online (Sandbox Code Playgroud)
我试过这个:
filename = 'text.txt'
with open(filename, mode="wb") as outfile: # also, tried mode="rb"
for s in mylist:
outfile.write("%s\n" % s)
Run Code Online (Sandbox Code Playgroud)
它创建了文本文件,但随后给出了错误;要么 aTypeError: a bytes-like object is required, not 'str'要么io.UnsupportedOperation: write取决于mode我使用的。
任何想法,以及对我做错了什么的简短解释,将不胜感激。
我有一个程序,它有多个线程,需要使用相同的句柄(它是用 FILE_SHARE_READ 打开的)来写入。如果一个线程关闭句柄,而另一个线程当前正在进行 I/O(在我的例子中为 WriteFile),会发生什么情况?CloseHandle 是否会阻塞直到写入完成?
MSDN 文档关于这个主题的内容似乎很少。
我希望我的服务器在节点退出时保存一些重要数据并在下次加载它们。
我尝试了这个问题的答案所建议的内容,但服务器似乎在能够写入文件之前关闭了。
这是我正在尝试的确切代码:
process.stdin.resume();
function exitHandler(options, err) {
if(!serverUp){return;}
serverUp = false;
fs.writeFile('server.txt', String(search_index),function (err) {
console.log("debug") // <-- This doesn't happen
process.exit();
});
}
//do something when app is closing
process.on('exit', exitHandler.bind(null,{cleanup:true}));
//catches ctrl+c event
process.on('SIGINT', exitHandler.bind(null, {exit:true}));
//catches uncaught exceptions
process.on('uncaughtException', exitHandler.bind(null, {exit:true}));
Run Code Online (Sandbox Code Playgroud)