////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at
  http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////
:documentationPath: /plugins/actions/
:language: en_US
:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/plugins/actions/checkfilelocked/src/main/doc/checkfilelocked.adoc
= Check Files Locked

== Description

This workflow action goes over a list of files to see that if they are locked by another process.
The way that it verified is by renaming a file to the same name as before.
On certain operating systems (MS Windows systems in particular) this operation will fail if the file is locked.

== Options

[width="90%", options="header"]
|===
|Option|Description
|Workflow action name|The name of the workflow action. *Note*: This name has to be unique in a single workflow. A workflow action can be placed several times on the canvas, however it will be the same workflow action.
|Settings: Include subfolders|Enable this option to also check files in subfolders of specified folders
|Settings: Copy previous results to args? |Pass the result rows of a previous workflow action execution to the files list of this action.
|Files/Folders |Here you can list a series of files or folders with wildcards.  |The wildcards are Java Regular expressions. For instance .*\.txt would check any file with a .txt extension.
|Please note that you can use the Delete/Edit buttons to edit the list.
You can also use the File/Folder and Wildcard actions right above the list to add new actions, browse for files and so on
|===