我正在编写一个改变桌面背景的程序。它通过读取文本文件来完成此操作。如果文本文件显示其中一个BG文件名,则将其保存为背景,并将另一个文件的名称写入文件并关闭。
我似乎无法让它发挥作用 这是我的代码:
import sys, os, ctypes
BGfile = open('C:\BG\BG.txt', 'r+' )
BGread = BGfile.read()
x=0
if BGread == 'mod_bg.bmp':
x = 'BGMATRIX.bmp'
BGfile.write('BGMATRIX.bmp')
BGfile.close()
elif BGread == 'BGMATRIX.bmp':
x = 'mod_bg.bmp'
BGfile.write('mod_bg.bmp')
BGfile.close()
pathToImg = x
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, pathToImg, 0)
当我使用"r+"
时,它会给我这个错误:
Traceback (most recent call last):
File "C:\BG\BG Switch.py", line 13, in <module>
BGfile.write('mod_bg.bmp')
IOError: [Errno 0] Error
这根本没有帮助!
当我使用"w+"
时,它只会删除文件中已有的内容。
任何人都可以告诉我为什么我会收到这个奇怪的错误,还有一种可能的解决方法吗?
答案 0 :(得分:4)
阅读后,只需在写入模式下重新打开文件:
with open('C:\BG\BG.txt') as bgfile:
background = bgfile.read()
background = 'BGMATRIX.bmp' if background == 'mod_bg.bmp' else 'mod_bg.bmp'
with open('C:\BG\BG.txt', 'w') as bgfile:
bgfile.write(background)
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, background, 0)
如果要打开文件进行读写操作,则必须至少快退到文件的开头并在写入前截断:
with open('C:\BG\BG.txt', 'r+') as bgfile:
background = bgfile.read()
background = 'BGMATRIX.bmp' if background == 'mod_bg.bmp' else 'mod_bg.bmp'
bgfile.seek(0)
bgfile.truncate()
bgfile.write(background)
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, background, 0)