有没有办法判断一个文件是否被另一个应用程序在Java的PHP中打开?如何判断文件是否被其他应用程序打开?
1
A
回答
3
命令fuser -v filename
会告诉你你需要知道的一切:
$ fuser -v test.php
USER PID ACCESS COMMAND
test.php: guest 17983 F.... cat
0
0
在linux上,您可以扫描所有/ proc/{pid}/fd/nnn文件描述符,以查看相关文件是否已经打开。
使用文件在正在运行的程序之间共享数据通常是一个糟糕的主意并容易出错。
1
1
在Windows下你可以下载handle这是一个命令行工具,以确定哪个窗口文件句柄所拥有哪些进程。
输出看起来是这样的:
Handle v3.46
Copyright (C) 1997-2011 Mark Russinovich
Sysinternals - www.sysinternals.com
------------------------------------------------------------------------------
System pid: 4 NT AUTHORITY\SYSTEM
84: File (R--) C:\System Volume Information\_restore{5D536487-92AI-5I25-9237-28AHSOU23728}\RP425\change.log
B4: File (RWD) C:\Documents and Settings\All Users\Application Data\avg9\Log\avgldr.log
728: File (-W-) C:\pagefile.sys
7A4: File (---) C:\WINDOWS\system32\config\SECURITY
(etc...)
这里,它使用handle.exe确定(仅限Windows)上有一个文件或目录的句柄的应用实例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Application which determines which processes have a handle on a file or
* directory. Pass the file or directory to check as the first application
* parameter.
*
* This application uses handle.exe, which can be downloaded here:
* http://technet.microsoft.com/en-us/sysinternals/bb896655
*
* Copy handle.exe to C:/Program Files/handle/
*
* For the Runtime.exec() code I looked at:
* http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2
*
* @author Adriaan
*/
public class Handle {
private static final String HANDLE_PATH = "C:/Program Files/handle/handle.exe";
private static final String DEFAULT_TARGET = "C:\\WINDOWS";
public static void main(String[] args) throws IOException,
InterruptedException {
checkOS();
String fileName = getFileName(args);
Process proc = executeCommand(fileName);
readResults(fileName, proc);
checkTermination(proc);
}
private static void checkOS() {
String osName = System.getProperty("os.name");
if (!osName.contains("Windows")) {
throw new IllegalStateException("Can only run under Windows");
}
}
private static String getFileName(String[] args) {
String fileName;
if (args != null && args.length > 0) {
fileName = args[0];
} else {
fileName = DEFAULT_TARGET;
}
return fileName;
}
private static Process executeCommand(String fileName) throws IOException {
String[] cmd = new String[] { HANDLE_PATH, fileName };
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
return proc;
}
private static void readResults(final String fileName, final Process proc) {
Thread errorHandler = new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getErrorStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.err.println(line);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
};
Thread outputHandler = new Thread() {
public void run() {
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
if (line.endsWith(fileName)) {
System.out.println(line);
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
};
errorHandler.start();
outputHandler.start();
}
private static void checkTermination(final Process proc)
throws InterruptedException {
int exitVal = proc.waitFor();
if (exitVal != 0) {
throw new IllegalStateException("Exitvalue " + exitVal);
}
}
}
相关问题
- 1. 如何判断一个文件是否在C上的其他地方打开?
- 2. 如何判断某个Excel文件是否使用VB.NET打开?
- 3. 如何在python中判断外部程序是否打开?
- 4. 如何判断用户是否第一次打开我的应用程序?
- 5. 如何判断其他应用程序是否已注册IPC Remoting通道?
- 6. 如何检测某个其他应用程序是否被点击打开? (vb.net)
- 7. 如何判断应用程序是否在没有URL的情况下打开?
- 8. 如何判断相机是否正在被其他进程使用?
- 9. 如何判断您的应用是否刚刚打开
- 10. 如何判断给定的进程是否用O_DIRECT打开文件?
- 11. 如何判断ID是否是Facebook应用程序或用户
- 12. UWP - 如果其他应用程序打开文件,则无法打开文件
- 13. 检查excel文件是否被其他用户打开
- 14. 如何检测文件是否被窗口中的其他进程打开
- 15. 如何检查文件是否被其他应用程序使用?
- 16. 如何判断打印机是否打印到文件?
- 17. 如何判断(在VBA中)是否从SharePoint打开文档?
- 18. 如何在Android上检查文件是否被其他应用程序
- 19. Cordova:判断页面是否在设备应用程序中打开
- 20. 如何判断其他人是否正在使用数据库?
- 21. 如何判断PDF是否被标记
- 22. 如何判断ASP.Net应用程序中的viewstate是否被篡改?
- 23. 如何判断我的OpenShift应用程序是否已被删除?
- 24. 如何判断iPhone应用程序是否由PhoneGap创建?
- 25. 应用程序如何判断它是否在hackintosh上运行?
- 26. 如何判断全屏应用程序是否正在运行?
- 27. 如何判断ClickOnce应用程序是否刚刚更新?
- 28. 如何判断JS Windows8 metro应用程序是否可见
- 29. 如何判断我的应用程序是否已暂停?
- 30. PHP is_writeable或被其他程序打开?
为什么它有关吗? –