我知道你可以使用tmpfile创建一个临时文件而不是写入它,并在不再需要它时关闭它.但我遇到的问题是我需要这样的文件的绝对路径:
"/var/www/html/lolo/myfile.xml"
Run Code Online (Sandbox Code Playgroud)
即使有其他功能或技巧,我能以某种方式获得路径吗?
我希望能够从数据库中下载文件,但没有
$fh = fopen("/var/www/html/myfile.xml", 'w') or die("no no");
fwrite($fh, $fileData);
fclose($fh);
Run Code Online (Sandbox Code Playgroud)
因为如果我这样做,如果有更多人尝试在同一时间下载同一个文件,则有可能重叠.还是我错了?
也许我可以生成这样的唯一(uniqID)文件名,而不是删除它们.或者,如果有很多人下载,这对服务器来说太费劲了吗?
mode参数默认为'w + b',因此可以在不关闭的情况下读取和写入创建的文件.
但是,以下代码无法按预期工作:
import tempfile
def play_with_fd():
with tempfile.TemporaryFile() as f:
f.write('test data\n')
f.write('most test data\n')
print 'READ:', f.read()
f.write('further data')
print 'READ:', f.read()
f.write('even more')
print 'READ:', f.read()
print 'READ:', f.read()
print 'READ:', f.read()
if __name__ == '__main__':
play_with_fd()
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
> python play.py
READ:
READ:
READ:
READ:
READ:
Run Code Online (Sandbox Code Playgroud)
谁能解释这种行为?有没有办法从临时文件中读取?(无需使用不会自动删除文件的低级mkstemp;而且我不关心命名文件)
是否存在FileInputStream关闭时自动删除基础文件的现有方法?
我打算让自己的实用程序类扩展FileInputStream并自己完成,但我有点惊讶的是没有已经存在的东西.
编辑:用例是我有一个Struts 2动作,它返回InputStream一个页面的文件下载.据我所知,当动作完成或者FileInputStream不再使用时我没有得到通知,我不希望生成的(可能很大的)临时文件被遗留下来.
问题不是Struts 2特定的,所以我最初没有包含该信息并使问题复杂化.
如果我已经创建了一个临时文件Tempfile,除了将它复制到另一个文件,我可以使它"永久"吗?我想避免在关联的Tempfile实例被垃圾收集或终止进程时被删除.
在一个相关的点上,有没有办法利用Tempfile机制(或使用类似的机制)来获取"新"文件名,而无需创建该名称的文件?
我正在尝试创建一个临时文件,我在另一个文件的某些行中编写,然后从数据中创建一些对象.我不知道如何找到并打开临时文件,以便我可以阅读它.我的代码:
with tempfile.TemporaryFile() as tmp:
lines = open(file1).readlines()
tmp.writelines(lines[2:-1])
dependencyList = []
for line in tmp:
groupId = textwrap.dedent(line.split(':')[0])
artifactId = line.split(':')[1]
version = line.split(':')[3]
scope = str.strip(line.split(':')[4])
dependencyObject = depenObj(groupId, artifactId, version, scope)
dependencyList.append(dependencyObject)
tmp.close()
Run Code Online (Sandbox Code Playgroud)
基本上我只是想制作一个中间人临时文件,以防止意外覆盖文件.
我有一个类,Path.GetTempFileName()它在活动时使用临时文件().我想确保在程序关闭后这些文件不会留在用户的硬盘驱动器上占用空间.现在我的类有一个Close()方法,它检查该类使用的任何临时文件是否仍然存在并删除它们.
将此代码放在Dispose()或Finalize()方法中会更有意义吗?
我目前正在开发基于C语言,基于NDK的Android应用程序.此应用程序需要创建临时文件.在常规Linux系统上,我将tmpfile确保在临时目录中正确创建这些文件并在进程结束时进行清理.
但是,我对各种Android设备的调查似乎表明了这一点
tmpfile 总是失败;/tmp目录;/data/local/tmp所有Android变种都不存在目录;TEMP设置环境变量;mkstemp没有比这更好的了tmpfile.现在,我确信我可以一起破解,但是看到SDK提供的context.getCacheDir和File.createTempFileJava应用程序,我希望在C级有一个等价物.
有没有人知道用于创建临时文件的良好可靠和跨Android方法?
当我open()用来打开文件时,我无法编写unicode字符串.我了解到我需要使用codecs并使用Unicode编码打开文件(请参阅http://docs.python.org/howto/unicode.html#reading-and-writing-unicode-data).
现在我需要创建一些临时文件.我试图使用该tempfile库,但它没有任何编码选项.当我尝试在临时文件中写入任何unicode字符串时tempfile,它会失败:
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
import tempfile
with tempfile.TemporaryFile() as fh:
fh.write(u"Hello World: ä")
fh.seek(0)
for line in fh:
print line
Run Code Online (Sandbox Code Playgroud)
如何在Python中使用Unicode编码创建临时文件?
编辑:
我正在使用Linux,我得到的错误消息是:
Traceback (most recent call last):
File "tmp_file.py", line 5, in <module>
fh.write(u"Hello World: ä")
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 13: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)如果我使用Path.GetTempPath()创建一些文件 - 它会在某个阶段自动删除,还是由我来删除它?
我希望我的应用程序清理它使用的所有临时文件,问题是并非所有临时文件都在我的控制之下,所以我只想"残酷地"解锁它们以便以编程方式删除它们.
temporary-files ×10
c# ×3
python ×3
io ×2
.net ×1
android-ndk ×1
file ×1
file-io ×1
file-locking ×1
idisposable ×1
java ×1
php ×1
ruby ×1
unicode ×1
windows ×1