对于在Windows中的Python文件上混合read感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍和write,并为您提供关于Android中Thread.currentThread()ge
对于在Windows中的Python文件上混合read感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍和write,并为您提供关于Android中Thread.currentThread()getId()和Process.myTid()之间的区别、Android中Thread.currentThread()。getId()和Process.myTid()之间的区别、file.canWrite(); file.canRead(); file.canExceute(); 总是返回true,虽然我的文件/目录没有访问权限、Java中的PrintWriter write()vs print()方法的有用信息。
本文目录一览:- 在Windows中的Python文件上混合read()和write()(在windows下编写的python)
- Android中Thread.currentThread()getId()和Process.myTid()之间的区别
- Android中Thread.currentThread()。getId()和Process.myTid()之间的区别
- file.canWrite(); file.canRead(); file.canExceute(); 总是返回true,虽然我的文件/目录没有访问权限
- Java中的PrintWriter write()vs print()方法
在Windows中的Python文件上混合read()和write()(在windows下编写的python)
看来,一个write()
紧跟在read()
上打开的文件r+
(或r+b
)在Windows的权限不更新文件。
假设testfile.txt
当前目录中有一个文件,其内容如下:
This is a test file.
我执行以下代码:
with open("testfile.txt", "r+b") as fd: print fd.read(4) fd.write("----")
我希望代码可以打印This
并将文件内容更新为:
This----a test file.
至少在Linux上这可以正常工作。但是,当我在Windows上运行它时,该消息会正确显示,但文件没有更改-
就像write()
被忽略了一样。如果我tell()
在文件句柄上调用它,则表明位置已更新(4
在write()
和之前和8
之后),但文件没有更改。
但是,如果我fd.seek(4)
在该write()
行的前面放了一个明确的名称,那么一切都会按照我的预期工作。
有人知道Windows下这种行为的原因吗?
供参考,我在Windows NT 7分区上使用Python 2.7.3。
编辑
在回应的意见,我都尝试r+b
和rb+
-的官方Python文档似乎意味着前者是规范的。
我fd.flush()
在各个地方拨打了电话,并在read()
和之间放置了一个电话,write()
如下所示:
with open("testfile.txt", "r+b") as fd: print fd.read(4) fd.flush() fd.write("----")
…产生以下有趣的错误:
IOError: [Errno 0] Error
编辑2
间接地,加入的flush()
帮助,因为它使我这个帖子描述了类似的问题。如果对此发表评论的人之一是正确的,那是底层Windows C库中的错误。
答案1
小编典典Python的文件操作应遵循libc
约定,因为它是在内部使用C文件IO函数实现的。
从fopen手册页或cplusplus中的fopen页引用
对于允许追加输入和输出操作而打开的要追加的文件(带有“
+”号的文件),应在写入操作和随后的写入操作之间对流进行刷新(fflush)或重新定位(fseek,fsetpos,rewind)。读取操作或未到达文件末尾的读取操作,然后进行写入操作。
总结一下,如果需要在写入后读取文件,则需要fflush
缓冲区,读取后的写入操作应以开头fseek
,如fd.seek(0,os.SEEK_CUR)
因此,只需将您的代码段更改为
with open("test1.txt", "r+b") as fd: print fd.read(4) fd.seek(0, os.SEEK_CUR) fd.write("----")
该行为与类似的C程序的行为一致
#include <cstdio>int main(){ char buffer[5] = {0}; FILE *fp = fopen("D:\\Temp\\test1.txt","rb+"); fread(buffer, sizeof(char), 4, fp); printf("%s\n", buffer); /*without fseek, file would not be updated*/ fseek(fp, 0, SEEK_CUR); fwrite("----",sizeof(char), 4, fp); fclose(fp); return 0;}
Android中Thread.currentThread()getId()和Process.myTid()之间的区别
众所周知
myTid() -
返回调用线程的标识符,该标识符与setThreadPriority(int,int)一起使用。
但是我发现Thread.currentThread().getId()
不等于Process.myTid()
。因此,我猜前者是JVM版本的线程ID,后者是Linux版本的线程ID。
我对吗?如果是这样,为什么Java会创建自己的线程ID而不使用Linux线程ID?
更新:
经过进一步研究并阅读了android的源代码,我有了新的认识:
Process.myTid()
是与平台(OS)相关的操作,Process.setThreadPriority()
在android的本机级别源中也是如此,它们都调用系统调用来实现目标。
但是java是一种与平台无关的语言,java并不强制主机os需要“
tid”或getTid()
方法,因为另一个os可以通过字符串键(仅作为示例,:)来标识其线程。然后,java用自己的方式标识其线程,在java作用域中分配一个唯一的线程ID,如果Java提供了像这样的静态api
Process.setThreadPriority()
,则Java作用域ID肯定是一个参数,但是我们不需要,因为我们可以通过调用来实现线程对象方法setPriority(int
priority)
。
欢迎任何评论。
更新:
答案都是正确的。但是法登的评论使我更加清楚。谢谢你们。
Android中Thread.currentThread()。getId()和Process.myTid()之间的区别
众所周知
myTid() -
返回调用线程的标识符,该标识符与setThreadPriority(int,int)一起使用。
但是我发现Thread.currentThread().getId()
不等于Process.myTid()
。因此,我猜前者是JVM版本的线程ID,后者是Linux版本的线程ID。
我对吗?如果是这样,为什么Java会创建自己的线程ID而不使用Linux线程ID?
更新:
经过进一步研究并阅读了android的源代码,我有了新的认识:
Process.myTid()
是与平台(OS)相关的操作,Process.setThreadPriority()
在android的本机级别源中也是如此,它们都调用系统调用来实现目标。
但是java是一种与平台无关的语言,java并不强制主机os需要“
tid”或getTid()
方法,因为另一个os可以通过字符串键(仅作为示例,:)来标识其线程。然后,java用自己的方式标识其线程,在java作用域中分配一个唯一的线程ID,如果Java提供了像这样的静态api
Process.setThreadPriority()
,则Java作用域ID肯定是一个参数,但是我们不需要,因为我们可以通过调用来实现线程对象方法setPriority(int
priority)
。
欢迎任何评论。
更新:
答案都是正确的。但是法登的评论使我更加清楚。谢谢你们。
file.canWrite(); file.canRead(); file.canExceute(); 总是返回true,虽然我的文件/目录没有访问权限
@H_301_0@需要检查我使用的文件/目录的权限@H_301_0@//filePath = path of file/directory access denied by user ( in windows ) File file = new File(filePath); file.canWrite(); file.canRead(); file.canExecute();@H_301_0@三个都返回true,但不能删除任何文件/目录@H_301_0@Java – 应用程序在rt.exec调用WinXP 32位的c ++程序后随机挂起@H_301_0@将按键从Web应用程序发送到Windows应用程序@H_301_0@peekmessage(创build窗口循环)@H_301_0@是否可以将现有的Windows Phone 8应用程序更新到Windows Phone Store 8.1@H_301_0@运算符“新”返回一个非本地堆指针只有一个类?@H_301_0@你必须检查:@H_301_0@SecurityManager.checkDelete(filepath);@H_301_0@正如在JavaDoc中所说的那样@H_301_0@你有没有尝试过使用java.nio.file.Files#isWritable方法?Java中的PrintWriter write()vs print()方法
Java类中的write()
和print()
方法之间有什么区别PrintWriter
?
答案1
小编典典print()格式化输出,而write()仅打印给出的字符。print()处理许多参数类型,使用String.valueOf()将它们转换为可打印的字符串,而write()仅处理单个字符,字符数组和字符串。
为了说明区别,write(int)将参数解释为要打印的单个字符,而print(int)则将整数转换为字符串。write(49)打印“
1”,而print(49)打印“ 49”。
今天关于在Windows中的Python文件上混合read和和write的讲解已经结束,谢谢您的阅读,如果想了解更多关于Android中Thread.currentThread()getId()和Process.myTid()之间的区别、Android中Thread.currentThread()。getId()和Process.myTid()之间的区别、file.canWrite(); file.canRead(); file.canExceute(); 总是返回true,虽然我的文件/目录没有访问权限、Java中的PrintWriter write()vs print()方法的相关知识,请在本站搜索。
本文标签: