Приложения UWP не только запускаются на настольном компьютере, но и на планшете, телефоне и т. Д. Итак, то, что вы хотите установить на страницу фиксированного размера, нереально. Но вы можете вызвать метод ApplicationView.TryResizeView (Size) , чтобы изменить размер представления.
Если вы все еще хотите иметь фиксированный размер страницы во время выполнения, вы можете обработать событие страницы SizeChanged
, в ее обработчике событий вы можете вызвать метод ApplicationView.TryResizeView
, чтобы изменить его размер до исходного размера.
Похоже, внешний процесс (AV?) Блокирует его, но разве вы не можете избежать проблемы в первую очередь?
private static bool modifyFile(FileInfo file, string extractedMethod, string modifiedMethod)
{
try
{
string contents = File.ReadAllText(file.FullName);
Console.WriteLine("input : {0}", contents);
contents = contents.Replace(extractedMethod, modifiedMethod);
Console.WriteLine("replaced String {0}", contents);
File.WriteAllText(file.FullName, contents);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
}
Так как моя репутация слишком маленькая для комментария ответа, вот моя обратная связь относительно ответа roquen (использующий настройки на xmlwriter, чтобы вынудить поток закрыться): это работает отлично, и это заставило меня сэкономить много времени. пример roquen требует некоторой корректировки, вот код, который работает над платформой.NET 4.8:
XmlWriterSettings settings = new XmlWriterSettings();
settings.CloseOutput = true;
writer = XmlWriter.Create(stream, settings);
Код работает, насколько я могу судить. Я бы запустил Sysinternals process explorer и выяснил, что держит файл открытым.
У меня это сработало
Вот мой тестовый код. Далее следует тестовый прогон:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
FileInfo f = new FileInfo(args[0]);
bool result = modifyFile(f, args[1],args[2]);
}
private static bool modifyFile(FileInfo file, string extractedMethod, string modifiedMethod)
{
Boolean result = false;
FileStream fs = new FileStream(file.FullName + ".tmp", FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
StreamReader streamreader = file.OpenText();
String originalPath = file.FullName;
string input = streamreader.ReadToEnd();
Console.WriteLine("input : {0}", input);
String tempString = input.Replace(extractedMethod, modifiedMethod);
Console.WriteLine("replaced String {0}", tempString);
try
{
sw.Write(tempString);
sw.Flush();
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
streamreader.Close();
streamreader.Dispose();
File.Copy(originalPath, originalPath + ".old", true);
FileInfo newFile = new FileInfo(originalPath + ".tmp");
File.Delete(originalPath);
File.Copy(originalPath + ".tmp", originalPath, true);
result = true;
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
return result;
}
}
}
C:\testarea>ConsoleApplication1.exe file.txt padding testing
input : <style type="text/css">
<!--
#mytable {
border-collapse: collapse;
width: 300px;
}
#mytable th,
#mytable td
{
border: 1px solid #000;
padding: 3px;
}
#mytable tr.highlight {
background-color: #eee;
}
//-->
</style>
replaced String <style type="text/css">
<!--
#mytable {
border-collapse: collapse;
width: 300px;
}
#mytable th,
#mytable td
{
border: 1px solid #000;
testing: 3px;
}
#mytable tr.highlight {
background-color: #eee;
}
//-->
</style>
Вы случайно не запускаете антивирусный сканер в реальном времени? Если это так, вы можете попробовать (временно) отключить его, чтобы проверить, обращается ли он к файлу, который вы пытаетесь удалить. (Предложение Криса использовать Sysinternals process explorer - хорошее предложение).
Я понимаю, что немного опоздал, но все же лучше поздно, чем никогда. Недавно у меня была аналогичная проблема. Я использовал XMLWriter
для последующего обновления файла XML и получал те же ошибки. Я нашел для этого чистое решение:
XMLWriter
использует базовый FileStream
для доступа к измененному файлу. Проблема в том, что при вызове метода XMLWriter.Close ()
базовый поток не закрывается и блокирует файл. Что вам нужно сделать, так это создать экземпляр вашего XMLWriter
с настройками и указать, что вам нужно закрыть этот базовый поток.
Пример:
XMLWriterSettings settings = new Settings();
settings.CloseOutput = true;
XMLWriter writer = new XMLWriter(filepath, settings);
Надеюсь, это поможет.