2016-06-03 2 views
0

Я новичок в C#. У меня есть этот фрагмент кода, и я понятия не имею, почему он не работает.Как открыть последний измененный документ в файле?

У меня есть документ в file, у меня нет file name, но я знаю, что это последнее изменение file в этом каталоге.

Я хочу, чтобы открыть его (на самом деле я просто скопировать и мимо него в другой папке), но я не уверен, что выбран этот файл (потому что я не могу открыть его)

Спасибо.

private void export_Click(object sender, EventArgs e) 
{ 
    var directory = new DirectoryInfo(@"C:\Users\Admin\files"); 
    var myFile = (from f in directory.GetFiles() 
     orderby f.LastWriteTime descending select f).First(); 
    myFile.OpenRead(); 
} 

(PS: System.Diagnostics.Process.Start(myFile) не работают, а также сказал, неверный аргумент, я не знаю, почему ...)

+0

Что это такое, если он не работает? Любые исключения? –

+0

Итак, вы хотите скопировать этот документ на другой путь? – Pikoh

+0

Код в вашем вопросе откроет файл в вашем приложении - похоже, что вы хотите открыть файл в своей программе по умолчанию (например, файл '.docx' открывается в MS Word). Это верно? –

ответ

0

На самом деле это работает для меня даже с Process.Start(). Но я выбираю папку "C:\Users\admin\documents", но это не имеет значения, существует ли папка, и у вас есть права на ее чтение.

var directory = new DirectoryInfo(@"C:\Users\admin\documents"); 
var myFile = (from f in directory.GetFiles() 
       orderby f.LastWriteTime descending 
       select f).First(); 
Process.Start(myFile.FullName); 
+1

Прекрасно работает благодаря «.FullName». Большое спасибо! – jsls

+0

@ Jrsls U приветствуются, рады услышать, как это работает. –

0

Попробуйте

var myFile = directory.GetFiles() 
      .OrderByDescending(f => f.LastWriteTime) 
      .First(); 

ИЛИ

public static FileInfo GetNewestFile(DirectoryInfo directory) { 
    return directory.GetFiles() 
     .Union(directory.GetDirectories().Select(d => GetNewestFile(d))) 
     .OrderByDescending(f => (f == null ? DateTime.MinValue : f.LastWriteTime)) 
     .FirstOrDefault();       
} 

Just назовите его следующим образом:

FileInfo newestFile = GetNewestFile(new DirectoryInfo(@"C:\directory\")); 

и все. Возвращает экземпляр FileInfo или null, если каталог пуст. Также проверьте access rights для конкретной папки.

1

Этот код должен работать для вас, если вы просто хотите скопировать этот файл на другой путь:

private void export_Click(object sender, EventArgs e) 
{ 
    string originPath = @"C:\Users\Admin\files"; 
    string destinationPath = @"d:\"; 
    var directory = new DirectoryInfo(originPath); 
    var myFile = (from f in directory.GetFiles() 
        orderby f.LastWriteTime descending 
        select f).First(); 

    File.Copy(Path.Combine(originPath, myFile.Name), 
       Path.Combine(destinationPath,myFile.Name)); 
} 
Смежные вопросы