2015-11-12 12 views
11

tôi nhìn thấy lỗi lạ với đoạn mã sau:File.Copy (sourceFileName, destFileName, ghi đè lên) không hoạt động trên một số hệ điều hành

File.Copy(oldPath, targetPath,true); 
File.SetAttributes(targetPath, FileAttributes.Normal); 

Một tập tin đã được chuyển ở một nơi khác, và bởi vì tôi thiếu viết ngay tại đường dẫn nguồn, tôi sao chép tệp và đặt quyền truy cập cho tệp đích. Trên hệ thống của tôi (Windows 7 SP1) điều này hoạt động tốt.

Tuy nhiên, trên (như xa như tôi biết) bất kỳ máy tính Windows 10 chương trình bị treo tại File.SetAttributes với thông điệp

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not find file 'C:\ProgramData\...\BlankDb.sdf'. 
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
at System.IO.File.SetAttributes(String path, FileAttributes fileAttributes) 

này nói với tôi mặc dù mã đã vượt qua File.Copy() dòng, tệp chưa được sao chép thành công. File.Copy() không hoạt động đồng bộ nữa, hoặc có bất cứ điều gì khác thay đổi trên hệ điều hành khác nhau trong lĩnh vực này?

Khá thẳng thắn, tôi bị bối rối. Lúc đầu, tôi nghĩ về các vấn đề thời gian và cố gắng gói các cuộc gọi Copy trong một Thread mới, cho đến khi tôi đọc File.Copy() sẽ không trả về anyways trước khi sao chép thành công hoặc chạy vào một lỗi.

+1

'File.Exists (targetPath)' sau khi "sao chép" cung cấp cho bạn là gì? – spender

+11

Vâng, rất kỳ lạ thực sự. Nhưng bạn sẽ phải giải quyết vấn đề cốt lõi, c: \ programdata là * không bao giờ * có thể ghi được trên một máy được cấu hình đúng. Nhiều lập trình viên có máy bị hư hỏng bởi trình cài đặt cr * ppy giúp thư mục có thể truy cập được. Viết bởi một lập trình viên đã thực hiện chính xác cùng một sai lầm bạn đã thực hiện. Thư mục này có một tên vụng về. Lạnh thực tế là nó không bao giờ là nơi chính xác để lưu trữ một cơ sở dữ liệu, bạn ** phải ** sử dụng appdata. –

+0

Có trình quét vi-rút trên máy tính Windows 10 không? – CodeCaster

Trả lời

0

Bạn có thể thử mã này. (Xin thay đổi đường dẫn đến của bạn)

static void Main(string[] args) 
    { 
     var oldDir = new DirectoryInfo("D:\\Personal\\Projects\\Desktop\\StackSolutions\\ConsoleApp1\\ConsoleApp1\\OldFilePath\\funy.jpg"); 
     var newDir = new DirectoryInfo("D:\\Personal\\Projects\\Desktop\\StackSolutions\\ConsoleApp1\\ConsoleApp1\\NewFilePath\\funy1.jpg"); 

     var oldPath = oldDir.FullName; 
     var targetPath = newDir.FullName; 

     File.Copy(oldPath, targetPath); 
     File.SetAttributes(targetPath, FileAttributes.Normal); 
    } 
+0

Bạn cần có tên fie với ext. trong targetPath – Dreammind

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