コード例 #1
0
ファイル: hatomarubbs.cs プロジェクト: bakera/Hatomaru.dll
		/// <summary>
		/// 新しい Article を追加して保存します。
		/// </summary>
		public void SaveArticle(Article a){

			// 保存用 Document を作る
			XmlDocument newDoc = Document.Clone() as XmlDocument;
			XmlNode newNode = a.ToXmlElement(newDoc);

			XmlElement metaData = newDoc.DocumentElement[MetaName];
			if(metaData == null) throw new Exception("XMLにメタデータが含まれていません。");
			newDoc.DocumentElement.InsertAfter(newNode, metaData);

			for(int i = 1; i <= SaveRetryTime; i++){
				try{
					using(FileStream saveFile = File.Open(FileMode.Create, FileAccess.Write, FileShare.None)){
						newDoc.Save(saveFile);
					}
					return;
				} catch(UnauthorizedAccessException){
					throw;
				} catch(IOException e) {
					if(i == SaveRetryTime) throw new IOException("書き込みアクセスが拒否されました。" + e.ToString());
					System.Threading.Thread.Sleep(SaveRetryInterval);
				}
			}
		}