有沒有辦法判斷一個文件是否被另一個應用程序在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或被其他程序打開?
爲什麼它有關嗎? –