我正在打开一个具有读取访问权限的文件,并允许对该文件进行后续的读|写|删除文件共享访问(尾随该文件)。如果文件在处理过程中被删除,是否有办法检测该文件是否正在等待删除(请参阅文件部分http://msdn.microsoft.com/en-us/library/aa363858(v=VS.85).aspx) ?如果某个外部进程(拥有进程)发出了删除,我想尽快关闭我的句柄以允许文件删除,以免干扰拥有进程中的任何逻辑。
我在 C# 中,看不到检测挂起删除的方法。该文件是使用 FileStream 对象打开的。是否有某种方法可以检测 C# 或其他 Windows 函数中的删除?
Linux 上可以使用哪些系统调用来删除文件?我指的不仅仅是 libc-wrapper 使用的系统调用(它又由命令行工具使用)。
除了unlink以及unlinkat哪些系统调用可用于删除 Linux 计算机上的文件?
我用了
File f=new File(MyPath);
f.delete();
Run Code Online (Sandbox Code Playgroud)
我使用了权限WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE,但它在 Android 5 中不起作用。
Logcat 消息:
java.io.FileNotFoundException: storage/external_SD/mm.txt: open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mahestan_programming.myapplication">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
自版本 4.4 起,我们无法从 MICRO SD 卡删除和写入文件。现在它是只读的。
android delete-file android-permissions android-external-storage
很简单,我想删除一个可能存在也可能不存在的文件。仅使用remove(filename)并忽略返回值是不好的做法吗?
编辑:通过删除,我指的是这个
我在使用 org.apache.commons.io.FileUtils 从 img 目录中删除文件时遇到问题。我正在使用此代码:
File dir = new File(".\\img");
FileFilter fileFilter = new WildcardFileFilter(userId + ".*");
File[] files = dir.listFiles(fileFilter);
System.out.println("files found: " + files.length);
for (int i = 0; i < files.length; i++) {
boolean success = FileUtils.deleteQuietly(files[i]);
System.out.println(files[i] + " delete result = " + success);
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,该代码用于用新的图像文件替换 img 目录中存在的图像文件。我需要删除所有以前存在的名称为 n.* 的文件,并使用新文件 egnpng。如果我尝试删除图像文件,我会得到变量成功的假值,并且文件不会被删除。但不是图像文件,例如 *.abc;*.acd; *.acdc 等被成功删除。这个问题是什么情况?
用户上传图像后,我必须将图像存储几分钟,直到用户确认并将其存储在数据库中
所以我想创建一个临时文件并用它来显示预览。
但我必须确保,如果用户不再交互,该文件将在一段时间后被删除
我发现这篇关于临时文件以及如何自动删除它们的文章https://softwarecave.org/2014/02/05/create-temporary-files-and-directories-using-java-nio2/
但如果我理解正确的话,deleteOnExit 和 ShutdownHook 将在虚拟机关闭后调用,所以如果我的应用程序长时间保持在线,谢谢,这些文件永远不会被删除,并且当我调用 close 方法时 DELETE_ON_EXIT 选项将删除文件,所以如果我从不调用由于用户不执行任何操作,因此该文件也永远不会被删除。这是正确的?
那么..有什么方法可以保证文件在一段时间后自动删除吗?
我正在考虑使用 deleteOnExit 和 DELETE_ON_CLOSE 选项创建一个文件,并添加到具有“超时”的线程,并在超时后检查文件是否仍然存在并删除,但我不知道是否存在最佳方法。
谢谢
更新
根据最佳答案,我开发了一个项目,java.util.File在 Kotlin 中写入时添加此行为。
https://github.com/vinicius-rob-cunha/kotlin-auto-delete-file
我将我的 Google Drive 添加到我的 OneDrive 并在其中包含一个包含无效名称 (con.mp3) 的文件。当我尝试删除文件(及其所在的目录)时,我收到“无效的文件句柄”。所以我尝试以管理员身份使用 PowerShell 删除它。
下面是目录列表显示的文件,结果Remove-Item和del。
PS> dir
Directory: C:\Users\Patrick\OneDrive\Google Drive\CW\CW.15WPM.VeryShortWords
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 1/13/2018 11:49 AM 117069 con.mp3
PS> Remove-Item * -Force
Remove-Item : An object at the specified path C:\Users\Patrick\OneDrive\Google
Drive\CW\CW.15WPM.VeryShortWords\con.mp3 does not exist.
At line:1 char:1
+ Remove-Item * -Force
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RemoveItemCommand
PS> del *.*
del : An object at the …Run Code Online (Sandbox Code Playgroud) 我知道可以使用脚本和驱动 API 将 Excel 文件转换为 Google Sheets,但我正在寻找脚本来转换 Excel 工作表并将转换后的文件移动到其他文件夹。
所以需要的步骤如下:
Excel 文件正在粘贴到正在同步到 Google Drive 的本地文件夹中,并且文件不大于 3mb。当前脚本如下。这是转换文件,但将它们放置在根文件夹中,并且当脚本再次运行时将重复转换。
function importXLS(){
var files = DriveApp.getFolderById('1hjvNIPgKhp2ZKIC7K2kxvJjfIeEYw4BP').searchFiles('title != "nothing"');
while(files.hasNext()){
var xFile = files.next();
var name = xFile.getName();
if (name.indexOf('.xlsx')>-1){
var ID = xFile.getId();
var xBlob = xFile.getBlob();
var newFile = { title : name+'_converted',
key : ID
}
file = Drive.Files.insert(newFile, xBlob, {
convert: true
});
}
} …Run Code Online (Sandbox Code Playgroud) file-conversion google-sheets delete-file google-apps-script google-drive-api
我创建了一个 CodePipeline,它从 CodeCommit 存储库获取输入(文件)并将文件部署到 S3 存储桶。当我删除 CodeCommit 存储库中的文件时,管道不会删除相应 S3 存储桶中的文件。简而言之,我希望我的 S3 存储桶与 CodeCommit 存储库同步。我怎样才能实现这个目标?
我的管道没有 CodeBuild 阶段。
AWS-CodeCommit --> CodePipeline --> 部署到跨账户-S3
amazon-s3 amazon-web-services delete-file aws-codecommit aws-codepipeline
我有一个文件列表,包括它们在.txt中的位置,如下所示:
\ SERVER01\backupsFolder\xx\a\ss.bak
\SERVER01\backupsFolder\xx\a\ss.bak
\SERVER02\backupsFolder\yy\b\dd.bak
\SERVER02\backupsFolder\yy\b\dd.bak
如何从"backupsFolder"文件夹中以递归方式删除其他所有内容,并输出所有已删除的文件?