我一直在编写一个监视目录的程序,当在其中创建文件时,它会更改名称并将它们移动到新目录.在我的第一个实现中,我使用了Java的Watch Service API,当我测试1kb文件时,它运行良好.出现的问题是,实际上创建的文件是50-300mb.当发生这种情况时,观察者API会立即找到该文件,但由于它仍在被写入,因此无法移动它.我尝试将观察者放在循环中(生成异常,直到文件可以移动),但这看起来效率很低.
由于这不起作用,我尝试使用定时器,每隔10秒检查一次文件夹,然后尽可能移动文件.这是我最终选择的方法.
问题:无论如何在没有进行异常检查或不断比较大小的情况下发出文件写入信号?我喜欢为每个文件使用Watcher API一次,而不是使用计时器不断检查(并运行异常).
所有回复都非常感谢!
NT
我遇到了这个有用的提示,如果你正在处理很多文件而你希望它们自动构建,你可以运行:
看做
它会重新运行,每隔几秒就可以生成一些东西.
但是......它似乎总是吞下所有的输出.我认为它可能更聪明 - 也许显示输出流但是禁止为'all'做任何事情,这样如果没有构建,输出就不会滚动.
使用循环和grep可以想到一些shell脚本方法...但也许更优雅的东西呢?有人见过什么吗?
我觉得我错过了什么.
这是我想要实现的目标:
有一个执行我的grunt任务server.js并且watch并行运行任务.我觉得这正是grunt设计的任务之一,但我无法实现这种配置.
其中,我读过这个: 通过Grunt运行Node应用程序, 但我仍然无法做到.
这是我的Gruntfile.js:
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
watch: {
scripts: {
files: ['*.js'],
tasks: ['start'],
options: {
nospawn: true
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('start', function() {
grunt.util.spawn({
cmd: 'node',
args: ['server.js']
});
grunt.task.run('watch');
});
grunt.registerTask('default', 'start');
};
Run Code Online (Sandbox Code Playgroud)
我"grunt-contrib-watch": "~0.3.1"应该是比grunt-contrib-watch@0.3.0前面提到的帖子更高的版本.
如果你能帮助我实现正确的配置,我将非常感激.但更多的是,我不明白为什么没有正式的grunt-contrib-nodemon-like包装和任务,因为我觉得使用grunt是另一个很好的理由(我真的很喜欢它作为工具!)
谢谢
我遇到了一个让我疯狂的自定义指令的问题.我正在尝试创建以下自定义(属性)指令:
angular.module('componentes', [])
.directive("seatMap", function (){
return {
restrict: 'A',
link: function(scope, element, attrs, controller){
function updateSeatInfo(scope, element){
var txt = "";
for (var i in scope.seats)
txt = txt + scope.seats[i].id + " ";
$(element).text("seat ids: "+txt);
}
/*
// This is working, but it's kind of dirty...
$timeout(function(){updateSeatInfo(scope,element);}, 1000);
*/
scope.$watch('seats', function(newval, oldval){
console.log(newval, oldval);
updateSeatInfo(scope,element);
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
这个"属性类型"指令(称为seatMap)试图显示我将从服务器通过$ resource service(参见下面的代码)获取到div(元素)的座位ID列表(例如,用于剧院) .
我正在使用这个简单的部分html:
<div>
<!-- This is actually working -->
<ul>
<li ng-repeat="seat in seats">{{seat.id}}</li>
</ul> …Run Code Online (Sandbox Code Playgroud) 在AngularJS中,我有一个监视范围变量的指令.当变量包含某些数据时,我需要稍微更改该变量.问题是,当我更改变量时,我$watch再次被触发.所以我最终处于一个连续的循环中.
scope.$watch('someVar', function(newValue, oldValue) {
console.log(newValue);
scope.someVar = [Do something with someVar];
});
Run Code Online (Sandbox Code Playgroud)
这会$watch再次触发,这是有道理的.但我确实需要一种方法来改变观察变量.有没有办法做到这一点?
我的目标是设置一个Docker容器,当从主机检测到文件更改时,该容器会自动重新启动NodeJS服务器.
我已选择nodemon来查看文件以进行更改.
在Linux和Mac环境中,nodemon和docker正在完美运行.
但是,当我在Windows环境中时,nodemon不会重新启动服务器.
文件在主机上更新,并使用volumesdocker-compose.yml文件中的参数进行链接.
我跑步时可以看到文件已经改变了docker exec <container-name> cat /path/to/fileChanged.js.这样我知道文件正确链接并在容器中进行了修改.
nodemon没有为Windows重启服务器的原因吗?
在调试我的C#时,我经常想知道变量的值何时发生变化,然后调查程序的状态.
目前,我这样做:
但是,所需的F10数量很烦人.
我想,这当然是自动化的.但我在我的Microsoft Visual C#Express中找不到这个功能,这让我感到惊讶.毕竟,监视列表会自动以亮红色突出显示更改的值.
我错过了什么吗?
从shell脚本中查看多个目录的正确方法是什么?
我在shell脚本中有以下内容:
sass --style compressed --watch branches/mysite/assets/css/sass:branches/mysite/assets/css &
sass --style compressed --watch branches/mysite2/themes/css/sass:branches/mysite2/themes/css &
sass --style compressed --watch trunk/assets/css/sass:trunk/assets/css
Run Code Online (Sandbox Code Playgroud)
但是,这会创建3个进程,当我按Ctrl + C停止时,并不会退出所有进程.
如何让sass观看多个目录并正确退出?
我使用PHPstorm 6,我的SCSS-Files被编译到CSS-Folder中,所以我有:
css
-- main.css
img
js
scss
-- main.scss
-- _variables.scss ...
Run Code Online (Sandbox Code Playgroud)
Hier是我对SCSS File Watcher的定义

Everthing工作正常,但昨天我将我的PHPstorm从版本6更新为7,现在我的SCSS编译/文件观察器不再工作了.File Watcher将CSS-File编译为SCSS-Folder.但我希望它在我的CSS文件夹中!
你在PHPSTorm 7 Filewatcher for SCSS Files中的设置是什么?
这是我的数据结构,你会看到文件style.css与FileDirName/css/style.css一个文件夹"to high"..

似乎本地服务器以"heroku local web"开头,不会监视文件更改并重新启动.我该怎么做呢?