Kivy 移植到 iOS。打开文件有效,而写入文件无效
Kivy porting to iOS. Opening a file works while writing to a file does not
重置保存给出错误信息"IOError: [Errno 9] Bad file descriptor"
def reset_save(self):
try:
file = open("./save.txt", "rw+")
except:
print("Wrong when saving to file.")
else:
for n in self.highscore:
file.write('0' + '\n')
self.highscore = [0,0,0,0,0,0,0,0,0,0]
file.close()
"rw+" 从 android 版本的 "w" 更改而来,使用 "w" 输出 "Wrong when saving to file"。 android 版本使用此代码没有问题。
两个版本的get_save都没有问题
def get_save(self):
try:
file = open("./save.txt", "r")
except:
print("Wrong when opening file.")
else:
n = 0
for line in file:
self.highscore[n] = float(line)
n += 1
file.close()
reset_save用于写入10行零,重置高分列表。
get_save 获取 save.txt 中的行并将它们放入列表
我使用 kivy 指南从 android 移植到 iOS。它正在通过 Xcode 构建。游戏的其余部分与 android 版本相同。
当您的应用程序处于可写状态时,并非所有平台上的所有目录都是可写的。在 iOS,所有应用程序都被沙盒化,应用程序所在的目录不可写。但 Android 的情况并非如此。
阅读会起作用,因为我猜你正在运送一个默认的 save.txt 文件。你不应该,如果应用程序启动时不存在,则创建它。
如果要保存文件,请将其保存在App.user_data_dir中。这是您的 reset_save
函数的示例,已修改:
from kivy.app import App
from kivy.logger import Logger
from os.path import join
def reset_save(self):
user_data_dir = App.get_running_app().user_data_dir
filename = join(user_data_dir, "save.txt")
try:
self.highscore = [0] * 10
with open(filename, "w") as fd:
for n in self.highscore:
fd.write('0' + '\n')
except:
Logger.exception("Cannot reset save file")
重置保存给出错误信息"IOError: [Errno 9] Bad file descriptor"
def reset_save(self):
try:
file = open("./save.txt", "rw+")
except:
print("Wrong when saving to file.")
else:
for n in self.highscore:
file.write('0' + '\n')
self.highscore = [0,0,0,0,0,0,0,0,0,0]
file.close()
"rw+" 从 android 版本的 "w" 更改而来,使用 "w" 输出 "Wrong when saving to file"。 android 版本使用此代码没有问题。
两个版本的get_save都没有问题
def get_save(self):
try:
file = open("./save.txt", "r")
except:
print("Wrong when opening file.")
else:
n = 0
for line in file:
self.highscore[n] = float(line)
n += 1
file.close()
reset_save用于写入10行零,重置高分列表。
get_save 获取 save.txt 中的行并将它们放入列表
我使用 kivy 指南从 android 移植到 iOS。它正在通过 Xcode 构建。游戏的其余部分与 android 版本相同。
当您的应用程序处于可写状态时,并非所有平台上的所有目录都是可写的。在 iOS,所有应用程序都被沙盒化,应用程序所在的目录不可写。但 Android 的情况并非如此。 阅读会起作用,因为我猜你正在运送一个默认的 save.txt 文件。你不应该,如果应用程序启动时不存在,则创建它。
如果要保存文件,请将其保存在App.user_data_dir中。这是您的 reset_save
函数的示例,已修改:
from kivy.app import App
from kivy.logger import Logger
from os.path import join
def reset_save(self):
user_data_dir = App.get_running_app().user_data_dir
filename = join(user_data_dir, "save.txt")
try:
self.highscore = [0] * 10
with open(filename, "w") as fd:
for n in self.highscore:
fd.write('0' + '\n')
except:
Logger.exception("Cannot reset save file")