重写print,log写入文件

--把打印的log写入文件  
local lfs = require("lfs")
local currentDir = lfs.currentdir()
--dazhanguo\src\cocos\cocos2d
local LOG_FILE_NAME = currentDir .. "../../../../" .. "GAME_LOG.txt"
local LOG_FILE_PATH = io.open(LOG_FILE_NAME,'w+')  

local isFirst = true
--重写print 让打印的东西能同时写入到文件里  
old_print = print  
print = function (...) 
    if not ... then return end  
    local splitLine = ""
    if isFirst then
        isFirst = false
        
        splitLine = "\n\n日期:\t" .. os.date() .. "\n\n"
    end
    local time = os.date("[%H:%M:%S]", os.time())
    old_print(...)  
    --写入  
    local args = {...}  
    local s = time
    for i , v in ipairs(args) do 
        s = s .. "\t" .. tostring(v)  
    end  
    LOG_FILE_PATH:write(splitLine.. tostring(s).."\n")  
    LOG_FILE_PATH:flush()  
end

 

### 关于C语言中 `fopen` 函数无法打开 `.txt` 文件的解决方案 在C语言中,`fopen` 是用于文件操作的核心函数之一。如果遇到无法通过 `fopen` 打开 `.txt` 文件的情况,可能涉及多个原因以及相应的解决方法。 #### 原因分析与解决方案 1. **路径问题** 如果指定的文件路径不正确或者不存在,则可能导致 `fopen` 返回 `NULL`。确保所提供的路径是绝对路径或相对路径,并且该路径下的文件确实存在。 ```c char* filename = "D:\\程序\\test.txt"; // 使用双反斜杠转义特殊字符 FILE *file = fopen(filename, "r"); if (file == NULL){ perror("Error opening file"); // 输出具体的错误信息 return 1; } fclose(file); ``` 这里的关键是确认路径的有效性和文件的存在性[^1]。 2. **权限不足** 当尝试访问某些受保护目录中的文件时,可能会因为权限不足而失败。例如,试图向系统关键位置写入数据或将只读属性的文件作为可修改对象处理都会引发此类问题。 需要检查目标文件是否有对应的读/写权限。可以通过操作系统界面调整文件属性来赋予适当权限[^3]。 3. **模式参数不当** 使用错误的模式字符串也会造成 `fopen` 失败。比如,“w”表示创建新文件并清空旧内容;“r”则仅允许读取现有文件。“wb+”可以实现二进制形式的同时读写功能等。因此选用合适的模式非常重要。 下面展示了不同场景下应采用何种模式的例子: ```c /* 只读 */ FILE *readFile = fopen("example.txt", "r"); /* 创建或重写文本文件 */ FILE *writeFile = fopen("output.txt", "w"); /* 添加至已有文件末尾 */ FILE *appendFile = fopen("log.txt", "a+"); ``` 4. **缓冲区满或其他内部状态异常** 根据 POSIX 的规定,当调用成功返回有效流指针时,除非文件名指向交互设备外均会启用完全缓存机制。一旦发生 I/O 错误(如磁盘空间耗尽),也可能致使后续再次调用此 API 不再正常工作直到先前的问题得到修复为止[^4]。 5. **编码兼容性考虑** 对于跨平台开发而言,还需要注意换行符转换差异所带来的影响——Windows 平台上通常以 `\r\n` 表示一行结束而在 Unix/Linux 则只需单个`\n`. 此外还有 BOM 字节标记干扰等问题都需留意[^2]. 综上所述,针对具体实例逐一排查以上几个方面即可找到根本所在进而采取相应措施加以应对。 ```python def check_fopen_issue(): import os test_file_path = r"D:\程序\test.txt" try: with open(test_file_path,'rb') as f: # 尝试以二进制只读方式打开文件 print('File opened successfully.') except FileNotFoundError: print(f'No such file or directory:{os.path.abspath(test_file_path)}') except PermissionError: print(f'Permission denied when accessing {test_file_path}. Please verify your access rights.') check_fopen_issue() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值