可能有很多像SO这样的问题,但没有一个问题可以解决我的问题。我正在以编程方式创建一个文本文件,并使用以下代码将文本输入到其中:
var data = [{
'name': 'charlie',
'id': 1
}, {
'name': 'mack',
'id': 2
}, {
'name': 'dargen',
'id': 3
}, {
'name': 'cool',
'id': 4
}, {
'name': 'silver',
'id': 5
}]
var ViewModel = function () {
var self = this;
self.innerLoop = ko.observableArray();
self.replies = ko.observableArray([{
'nameRep': 'becok',
'rid': 1,
'reply': 'hello'
}, {
'nameRep': 'saluk',
'rid': 1,
'reply': 'hey bro'
}, {
'nameRep': 'chin-ui',
'rid': 4,
'reply': 'wassup'
}, {
'nameRep': 'mark',
'rid': 3,
'reply': 'chill out'
}, {
'nameRep': 'kaj',
'rid': 3,
'reply': 'ok dear'
}, ]);
var comment = function (c) {
this.id = ko.observable(c.id);
this.name = ko.observable(c.name);
this.array = ko.computed(function () {
var name = this.id();
var arr = [];
arr = ko.utils.arrayFilter(self.replies(), function (item) {
return item.rid === name;
});
return arr;
}, this);
}
self.comments = ko.observableArray();
ko.utils.arrayForEach(data, function (item) {
self.comments.push(new comment(item));
});
};
ko.applyBindings(new ViewModel());
我想在文本文件中写下每个像素的值。它适用于少数值,然后突然停止抛出异常。
此外,我检查了文件的安全属性,并确保我可以完全控制文件。我无法理解。
任何解决这个问题的建议都会非常感激
答案 0 :(得分:3)
您的计划应该有效。因此,正如消息所述,该文件正由另一个进程打开。除非你自己做一些事情导致这种情况,否则很可能是Windows搜索的罪魁祸首。
要阻止Windows搜索干扰您的程序,请停止Windows搜索服务。从“开始”菜单或命令提示符输入命令services.msc
:
选择Windows搜索行,然后使用工具栏按钮或右键单击菜单停止服务。
如果您愿意,也可以禁用该服务,以防止它在重新启动计算机时再次启动。双击或右键单击菜单可以使用属性设置:
关于您的代码,请考虑使用StringBuilder
将文本存储在循环中,然后在最后将文本写入文件,而不是多次访问文件系统:
StringBuilder sb = new StringBuilder();
for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
Color pixel = image.GetPixel(x, y);
sb.AppendLine("Value at" + x + "" + y + "" + "is:" + pixel);
if (pixel.R == keywordBytes[0] && pixel.G == keywordBytes[1] && pixel.B == keywordBytes[2])
{
firstMatchingBytePos = new Point(x, y);
KeywordFound(keyword, firstMatchingBytePos);
}
}
}
string path = @"E:\Example.txt";
if (!File.Exists(path))
{
File.Create(path);
}
File.AppendAllText(path, sb.ToString());
编辑:请注意,如果您使用这种方法,字符串可能会变得非常大,因此您可能希望对其进行优化,例如每次字符串到达时都要写入文件一定长度,而不是最后一次。
答案 1 :(得分:0)
您正尝试为每次循环迭代重新创建文件。并且你试图超越API,已经知道什么时候必须创建一个新文件。停止:
string path = @"E:\Example.txt";
for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
Color pixel = image.GetPixel(x, y);
// this line is all you need to append a line to an existing, OR NEW file
File.AppendText(path, "\nValue at" + x + "" + y + "" + "is:" + pixel);
if (pixel.R == keywordBytes[0] && pixel.G == keywordBytes[1] && pixel.B == keywordBytes[2])
{
firstMatchingBytePos = new Point(x, y);
KeywordFound(keyword, firstMatchingBytePos);
}
}
}
答案 2 :(得分:0)
尝试在File.AppendAllText
之后添加.Close()