对自己很欣赏

太久没用我的M1, 发现sublime还开着一个随笔,可能是去年写的。
看了下步骤,心得,对自己很满意。。

问题背景
1. 文件删除验证逻辑:
• 目标是验证文件在执行 DELETE_ON_CLOSE 后是否被真正删除。
• 在 double-check 文件是否存在的步骤,发现文件被 重新创建,导致测试结果不符合预期。
2. 核心问题:
• 第三步关闭文件句柄(close)后,文件确实被删除。
• 第四步(double-check 文件) 时,由于 FILE_OPEN_IF 或不明确的 disposition 设置,文件在验证时意外被重新创建。

调整和优化记录

  1. 修改 double-check 文件的打开方式
    • 问题:文件重新创建的核心原因是 disposition 默认值导致的行为。
    • 解决方法:
    • 在 double-check 步骤中,明确指定 disposition=pike.smb2.FILE_OPEN,避免默认行为导致文件被重新创建。

"""Step 4: Verify file deletion"""
try:
with tc.chan.create(
tc.tree,
filename,
access=pike.smb2.GENERIC_READ,
disposition=pike.smb2.FILE_OPEN, # 确保仅尝试打开,文件不存在时抛异常
).result() as fh_check:
pytest.fail(f"File '{filename}' still exists after DELETE_ON_CLOSE.")
except pike.ntstatus.NtStatusError as e:
assert e.status == pike.ntstatus.STATUS_OBJECT_NAME_NOT_FOUND, (
f"Unexpected error for filename '{filename}': {e}"
)
print(f"File successfully deleted. Test passed: {filename}")

  1. 增加 Close 和 Double-Check 的日志
    • 问题:测试步骤输出不够清晰,难以跟踪文件关闭和验证的具体操作。
    • 解决方法:
    • 在 close 和 double-check 操作中增加日志,明确标识文件关闭和验证状态。

"""Close file handle"""
print("Step 3: Closing file handle with DELETE_ON_CLOSE...")
fh_delete.close()
print(f"File closed: {filename}. It should now be deleted.")

"""Verify file deletion"""
print("Step 4: Verifying file deletion...")

  1. 验证文件是否被删除
    • 问题:double-check 过程中可能返回非预期异常。
    • 解决方法:
    • 明确判断抛出的异常是否为 STATUS_OBJECT_NAME_NOT_FOUND。
    • 非预期异常时抛出详细信息。

最终行为
1. 文件在关闭句柄时被正确标记为删除(DELETE_ON_CLOSE)。
2. Double-check 步骤验证文件确实被删除:
• 文件不存在时,捕获 STATUS_OBJECT_NAME_NOT_FOUND,输出成功信息。
• 遇到其他异常时,记录完整的错误上下文。

解决文件重创建问题后的最终输出

修复问题后,终端日志输出如下:

==================================================
Step 1: Creating file...
File created successfully: test_io_🙏_abc123.txt

Step 2: Querying file info...
Queried file info successfully: \share1\test_io_🙏_abc123.txt

Step 3: Closing file handle with DELETE_ON_CLOSE...
File closed: test_io_🙏_abc123.txt. It should now be deleted.

Step 4: Verifying file deletion...
File successfully deleted. Test passed: test_io_🙏_abc123.txt

今晚的关键调整点总结
1. 明确 double-check 的 disposition 参数:
• 使用 FILE_OPEN,确保不会因默认行为重新创建文件。
2. 改进日志:
• 增加文件关闭(close)和验证(double-check)阶段的日志,便于追踪流程。
3. 增加异常处理:
• 捕获并明确判断 STATUS_OBJECT_NAME_NOT_FOUND,避免因非预期异常导致误判。

这次调整重点解决了 double-check 时文件重新创建的问题,并确保每个步骤输出清晰、行为符合预期。今晚的进展非常扎实,接下来的任务会更加轻松! 😊

posted @ 2025-12-03 11:49  vivi~  阅读(0)  评论(0)    收藏  举报