Files
full-stack-doc/backend/test_direct_write.py
2025-10-14 20:05:29 +08:00

90 lines
2.7 KiB
Python

#!/usr/bin/env python3
"""
直接测试文件写入,绕过所有业务逻辑
"""
import os
def test_direct_write():
"""直接测试文件写入"""
print("=== 直接文件写入测试 ===")
# 测试内容
test_content = b"Direct write test content - bypassing all logic"
# 文件路径
file_path = "uploads/direct_test_write.txt"
print(f"测试内容大小: {len(test_content)} bytes")
print(f"目标路径: {os.path.abspath(file_path)}")
# 确保目录存在
os.makedirs("uploads", exist_ok=True)
# 方法1: 使用 open 直接写入
print("\n--- 方法1: 直接 open 写入 ---")
try:
with open(file_path, "wb") as f:
written = f.write(test_content)
f.flush()
os.fsync(f.fileno())
print(f"写入字节数: {written}")
if os.path.exists(file_path):
size = os.path.getsize(file_path)
print(f"文件大小: {size} bytes")
if size == len(test_content):
print("✅ 方法1成功!")
else:
print(f"❌ 方法1失败: 大小不匹配 {size} != {len(test_content)}")
else:
print("❌ 方法1失败: 文件不存在")
except Exception as e:
print(f"❌ 方法1异常: {e}")
# 方法2: 使用 Path 写入
print("\n--- 方法2: 使用 pathlib.Path 写入 ---")
from pathlib import Path
file_path2 = "uploads/path_test_write.txt"
try:
Path(file_path2).write_bytes(test_content)
if os.path.exists(file_path2):
size = os.path.getsize(file_path2)
print(f"文件大小: {size} bytes")
if size == len(test_content):
print("✅ 方法2成功!")
else:
print(f"❌ 方法2失败: 大小不匹配 {size} != {len(test_content)}")
else:
print("❌ 方法2失败: 文件不存在")
except Exception as e:
print(f"❌ 方法2异常: {e}")
# 方法3: 检查现有文件
print("\n--- 方法3: 检查现有损坏的文件 ---")
existing_files = [f for f in os.listdir("uploads") if f.endswith('.txt')]
print(f"现有文本文件: {existing_files}")
for filename in existing_files[:3]: # 只检查前3个
file_path = os.path.join("uploads", filename)
try:
size = os.path.getsize(file_path)
print(f"{filename}: {size} bytes")
if size > 0:
with open(file_path, 'rb') as f:
content = f.read(min(100, size))
print(f" 内容预览: {content}")
except Exception as e:
print(f" 读取错误: {e}")
if __name__ == "__main__":
test_direct_write()