2011-06-08 15 views
7

Gerçekten çılgın! Far 2.0'ı kullanarak bir dosya oluşturdum (http://www.farmanager.com/, belki başka bir dosya yöneticisini kullanabilirsiniz); dosya adı 'C: \ 123.txt' (evet, dosya yolunun sonunda boşluk ile).Dosya adının sonunda dosya kopyalanamıyor/taşınamıyor

Ve kopyalayabilir veya C# programı kullanarak bu dosyayı taşımak için çalışıyorum:

File.Copy("C:\\123.txt ", "C:\\456.txt", true); 

Ama başarısız olur "bulunamadı dosyası 'C: \ 123.txt'." istisna. Ama dosya var!

Windows API çalışıyorum:

[DllImport("kernel32.dll")] 
public static extern int MoveFile(string lpExistingFileName, string lpNewFileName); 
MoveFile("C:\\123.txt ", "C:\\456.txt",); 

Ama çok başarısız olur.

Ve xcopy yarar çalışıyorum:

C:\>xcopy "C:\123.txt " "C:\456.txt" /Y 
File not found - 123.txt 
0 File(s) copied 

Nasıl programlı dosyayı yeniden adlandırabilirsiniz ki? Ve bu neden oluyor?

Benim OS: Windows 7 x64

+0

Eğer "@" "" C: \ 123.txt "" "' yi kullanırsanız? – zerkms

+1

Bu dosyayı nasıl oluşturdunuz? Normalde beyaz boşluk kısaltılır. – leppie

+0

zerkms, Yoldaki geçersiz karakterler. –

cevap

10

Sen Win32 yasadışı sizin dosya adına bir karakter var. Win32 yol ayrıştırıcısını engellemek için, dosya adınızı \\?\ ile önek yapmanız gerekir. Örneğin:

MoveFile(@"\\?\C:\123.txt ", "C:\\456.txt"); 

Bu teknik aynı zamanda uzunluğunda 32k kadar yollara sahip sağlayacak (yalnızca Win32 sürücü harfi dahil 260 olsun). ve her şey sonradan kaldırılacak ancak uzay kalır:

+0

Harika! Çok teşekkür ederim –

+0

Bu benim için çalıştı, ancak FindFirstFile/FindNextFile benim için alanı iade değil. – malkia

+1

@malkia: Geçersiz dosya adlarıyla ilgili bir sorun yaşıyorsanız, varsa 8.3 kısa adını her zaman kullanabilirsiniz. – Gabe

0

Uzaydan

C:\123.txt :illegal 

sonra yasadışı karakteri ile dosyaya erişebilir. Bu şekilde bir boşluk ile biten dosyaları da oluşturabilirsiniz.

İlgili konular