测试专用:生成指定大小和格式的文件

查看 96|回复 9
作者:Hf6824329   
[Python] 纯文本查看 复制代码import os
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from tkinter.font import Font
class FileGeneratorGUI:
    def __init__(self):
        self.window = tk.Tk()
        self.window.title("文件生成器")
        self.window.geometry("600x500")
        self.window.configure(bg='#f0f0f0')
        
        # 设置样式
        style = ttk.Style()
        style.configure('TLabel', font=('Microsoft YaHei UI', 10), padding=5)
        style.configure('TEntry', padding=5)
        style.configure('TButton', font=('Microsoft YaHei UI', 10), padding=5)
        style.configure("Custom.Horizontal.TProgressbar", thickness=20)
        
        # 创建主框架
        main_frame = ttk.Frame(self.window, padding="20")
        main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))
        
        # 创建标题
        title_font = Font(family='Microsoft YaHei UI', size=16, weight='bold')
        title_label = tk.Label(main_frame, text="文件生成器", font=title_font, bg='#f0f0f0')
        title_label.grid(row=0, column=0, columnspan=3, pady=20)
        
        # 创建输入框和标签
        ttk.Label(main_frame, text="文件大小(MB):").grid(row=1, column=0, sticky=tk.W)
        self.size_entry = ttk.Entry(main_frame, width=30)
        self.size_entry.grid(row=1, column=1, padx=10, pady=10)
        
        ttk.Label(main_frame, text="文件格式(例如: .txt):").grid(row=2, column=0, sticky=tk.W)
        self.format_entry = ttk.Entry(main_frame, width=30)
        self.format_entry.grid(row=2, column=1, padx=10, pady=10)
        
        # 输出路径选择
        ttk.Label(main_frame, text="输出路径:").grid(row=3, column=0, sticky=tk.W)
        self.path_var = tk.StringVar()
        self.path_entry = ttk.Entry(main_frame, textvariable=self.path_var, width=30)
        self.path_entry.grid(row=3, column=1, padx=10, pady=10)
        
        self.browse_btn = ttk.Button(main_frame, text="浏览", command=self.browse_path)
        self.browse_btn.grid(row=3, column=2, padx=5)
        
        # 生成按钮
        self.generate_btn = ttk.Button(main_frame, text="生成文件", command=self.generate_file, style='TButton')
        self.generate_btn.grid(row=4, column=0, columnspan=3, pady=30)
        
        # 进度条
        self.progress = ttk.Progressbar(main_frame, length=400, mode='determinate',
                                      style="Custom.Horizontal.TProgressbar")
        self.progress.grid(row=5, column=0, columnspan=3, pady=20)
        
        # 状态标签
        self.status_var = tk.StringVar()
        self.status_label = ttk.Label(main_frame, textvariable=self.status_var)
        self.status_label.grid(row=6, column=0, columnspan=3)
        
    def browse_path(self):
        directory = filedialog.askdirectory()
        self.path_var.set(directory)
        
    def generate_file(self):
        try:
            self.generate_btn.configure(state='disabled')
            self.status_var.set("正在生成文件...")
            
            size = float(self.size_entry.get())
            file_format = self.format_entry.get()
            output_path = self.path_var.get()
            
            if not size or not file_format or not output_path:
                messagebox.showerror("错误", "请填写所有必要信息!")
                return
               
            if not file_format.startswith('.'):
                file_format = '.' + file_format
               
            filename = f"generated_file_{size}MB{file_format}"
            full_path = os.path.join(output_path, filename)
            
            # 生成文件
            bytes_size = int(size * 1024 * 1024)  # 转换为字节
            with open(full_path, 'wb') as f:
                chunk_size = 1024 * 1024  # 1MB chunks
                chunks = bytes_size // chunk_size
               
                self.progress['maximum'] = chunks
               
                for i in range(chunks):
                    f.write(os.urandom(chunk_size))
                    self.progress['value'] = i + 1
                    self.status_var.set(f"已完成: {int((i+1)/chunks*100)}%")
                    self.window.update()
                    
                # 处理剩余字节
                remaining = bytes_size % chunk_size
                if remaining:
                    f.write(os.urandom(remaining))
            
            messagebox.showinfo("成功", f"文件已生成:\n{full_path}")
            self.progress['value'] = 0
            self.status_var.set("")
            
        except ValueError:
            messagebox.showerror("错误", "请输入有效的文件大小!")
        except Exception as e:
            messagebox.showerror("错误", f"生成文件时出错:{str(e)}")
        finally:
            self.generate_btn.configure(state='normal')
            
    def run(self):
        self.window.mainloop()
if __name__ == "__main__":
    app = FileGeneratorGUI()
    app.run()
通过网盘分享的文件:生成指定大小格式的文件.exe
链接: https://pan.baidu.com/s/11gO1LigDTs1lvnFSKJ5sog?pwd=hzhz 提取码: hzhz

文件, 文件大小

semiuel   

比方说我生成一个10MB的.PDF文件,这个文件能用PDF软件打开吗?
生成这样的文件的作用是什么?
jesseding   

谢谢分享,用来上传网盘
lies2014   


semiuel 发表于 2025-8-26 16:53
比方说我生成一个10MB的.PDF文件,这个文件能用PDF软件打开吗?
生成这样的文件的作用是什么?

想多了,写入的是随机数据,严格地说应该是生成指定后缀名的文件
BrutusScipio   

既然都是随机生成了 怎么一次只能生成一个 测试数据不是应该随机生成指定数量 然后可以指定相同大小或者特定范围内吗
iSummer999   

过来试试软件
xixi520   

这个用来抹除磁盘数据应该好用
天天哈皮   

感谢分享!
Hf6824329
OP
  


semiuel 发表于 2025-8-26 16:53
比方说我生成一个10MB的.PDF文件,这个文件能用PDF软件打开吗?
生成这样的文件的作用是什么?

测试文件上传
DylanTomas   

用AI搓的代码吧
您需要登录后才可以回帖 登录 | 立即注册

返回顶部