2012-06-26 54 views
12

Tôi có một ứng dụng tạo Thư mục không hợp lệ ... ví dụ: c:\Program Files\somedirectory. - dấu chấm là một phần của tên thư mục.Delphi: Đổi tên Thư mục Không hợp lệ

Bây giờ, tôi đã thử mọi thứ mà tôi biết về cách đổi tên tệp trong delphi.

  • RenameFile (file1, file2)
  • MoveFile (File1, File2)
  • vv ...

Tôi đã cố gắng nhận được cửa sổ ngắn con đường ExtractShortPathName nhưng điều này chỉ trả về một chuỗi rỗng . (gọi trong nhắc lệnh: "ĐỔI TÊN ShortOldName NewName")

Bây giờ tôi biết tôi có thể tự làm điều đó trong cmd nhưng tôi không muốn dành thời gian để đi qua tất cả các file của tôi và làm điều đó;)

Dưới đây là một chút của mã của tôi:

xshortname := ExtractFileName(ExtractShortPathName(ns + oldName)); 
    xNewName := newName; 

    cmdTxt := PWideChar('/C cd ' + ns); 
    cmdTxt2 := PWideChar(cmdTxt + '&&' + ' RENAME ' + xshortname + ' ' + #34 + xNewName + #34); 
    ShellExecute(0, nil, 'cmd.exe', cmdTxt2, nil, SW_SHOWNORMAL); 

tôi biết ShellExecute không phải là phương pháp tốt nhất để được sử dụng ở đây. Tôi chỉ cố gắng để có được stinker để làm việc. Tôi sẽ lo lắng về việc tối ưu hóa và mã hóa Delphi thích hợp sau này.

Vì vậy, câu hỏi của tôi là: Có ai biết chức năng cho phép tôi đổi tên một thư mục không hợp lệ không?

Trả lời

16

Bạn có thể sử dụng Windows tiêu chuẩn hàm API MoveFile() nếu bạn vượt qua tên của thư mục một cách đặc biệt:

MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed'); 

thay vì

MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed'); 

Thông tin thêm về nó có thể được tìm thấy trên MSDN theo chủ đề "Naming Files, Paths, and Namespaces". Lưu ý rằng nó đặc biệt khuyên chống lại việc đặt dấu chấm trong tên tệp.

+0

Làm việc hoàn hảo. Cảm ơn bạn! Tìm kiếm ở mọi nơi. Tôi biết SO sẽ không thất vọng. –

Các vấn đề liên quan