å
æ¥ã大ããªãµã¤ãºã®XMLãã¡ã¤ã«ãè§£æãã¦å¤æããå°ããªãµã¤ãºã®XMLãã¡ã¤ã«ãåºåããã¨ããããã°ã©ã ãC#ã§ä½ãã¾ããã
XMLã®è§£æã使ã¯LINQã使ãã°ããªãç°¡åãªã®ã§ãã®é¨åã®ãã¸ãã¯ã¯ã¾ã£ããåé¡ãªãã§ããã®ã§ãããåºåãããã¡ã¤ã«åã®ä»ãæ¹ãééã£ã¦ãã¾ãã¨ãããã¹ããã¦ãã¾ãã¾ããã
ããå°ã詳ããæ¸ãã¨ãA.xmlã¨ããXMLãã¡ã¤ã«ã10åã®ãã¡ã¤ã«ã«åå²ããã¨ãã«ãåå²å¾ã®ãã¡ã¤ã«ã®ååãA_yyyyMMddhhmissfff.xmlã¨ããã¨ããããã¡ã¤ã«åãéè¤ãã¦ãã¾ã£ãã¨ãããã¹ã§ãã
ããã§yyyyMMddhhmissfffã¨ããã®ã¯ãæ¥æãå ¥ããã¨ããæå³ã§ãã¦ããã¨ãã°2012å¹´6æ18æ¥12æ34å56ç§789ããªç§ã«å¦çãããå ´åã«ã¯A_20120618123456789.xmlã¨ããååãä»ãããã¨ã«ãªãã¾ãã
ãªãã§ããããã¡ã ã£ãã®ãã¯ããä¸ç®çç¶ã§ãããXMLãä½ãã®ã«è¦ããæéã1ããªç§ä»¥ä¸ã ã£ãå ´åã«ååãåãXMLãã§ãã¦ãã¾ãã¨ãããã¹ã§ããåæ©çããã...ã
ããã¯ããã§ææããããã¨çãç®ã«ããã¨ããããæè¨ã«ãªã£ãããã§ããããã£ãããªã®ã§ãã¡ã¤ã«åãèªåçæããæ¹æ³ã«ã¤ãã¦ã¾ã¨ãããã¨æãã¾ãã
1. Path.GetTempFileName()ã使ã
䏿ãã¡ã¤ã«ã使ããæ¹æ³ã調ã¹ãæã«ä¸çªæåã«åºã¦ããã®ããã®Path.GetTempFileName()ã¨ããã¡ã½ããã§ããã
(ã¡ãªãã)
-
- ã¡ã½ãããå¼ã³åºãã ãã§ãã¡ã¤ã«åãåãã¦æ¥½
(ãã¡ãªãã)
-
- ãã¡ã¤ã«ã®åºåå ãã©ã«ãããã¡ã¤ã«ã®æ¡å¼µåã鏿ã§ããªã
- IOExceptionãåºãå ´åããã
試ãã«ä½¿ã£ã¦ã¿ãã¨ããã以ä¸ã®ä»æ§ã§åä½ãã¦ããããã§ããã
| åºåå | %TEMP% |
| ãã¡ã¤ã«å | tmp????.tmp |
| ãã®ä» | ã¡ã½ãããå¼ã³åºããã¿ã¤ãã³ã°ã§ãµã¤ãºã0Byteã®ãã¡ã¤ã«ãä½ããã |
ãã¡ã¤ã«åã®????ã«ã¯0000-FFFFã¾ã§ã®æååãé çªã«å
¥ãããã§ãããããFFFFã¾ã§ãã£ã¦ãã¾ãã¨ã次ã®å¼ã³åºããIOExceptionã«ãªãã¾ãã®ã§ãã¤ã¾ãã¯65535åãããã®ã¡ã½ããã¯å¼ã¹ãªããã¨ã«ãªãã¾ãããã¡ãã使ãçµãã£ããã¡ã¤ã«ã¯æ¶ãã°ããã®ã§ãããããããã䏿ãªãã¡ã¤ã«åãæ¬²ãããã ããªã®ã«ã使ãçµãã£ããã¨ã®å§æ«ã¾ã§ãããã¨ãå¼·å¶ãããã®ã£ã¦ãªããéãæ°ã...ãããããããã¨ã¯ãããã§ãããæ¬æ«è»¢åãªæ°ããã¦ãªãã¾ããã
ã¨ãæ¸ãã¦ããã¡ããã¨MSDNã«æ¸ãã¦ã¾ããã
䏿ãªååãæã¤ 0 ãã¤ãã®ä¸æãã¡ã¤ã«ããã£ã¹ã¯ä¸ã«ä½æãããã®ãã¡ã¤ã«ã®å®å ¨ãã¹ãè¿ãã¾ãã
Path.GetTempFileName Method (System.IO) | Microsoft Docs
ãã®ã¡ã½ããã¯ã.TMP ã¨ããæ¡å¼µåãæã¤ä¸æãã¡ã¤ã«ã使ãã¾ãã
以åã®ä¸æãã¡ã¤ã«ãåé¤ããã«ãGetTempFileName ã¡ã½ããã使ç¨ã㦠65535 åãè¶ ããæ°ã®ãã¡ã¤ã«ã使ããå ´åãIOException ãçºçãã¾ãã
GetTempFileName ã¡ã½ããã¯ã䏿ãªä¸æãã¡ã¤ã«åã使ç¨ã§ããªãå ´åã«ãIOException ãçºçããã¾ãããã®ã¨ã©ã¼ã解決ããã«ã¯ããã¹ã¦ã®ä¸å¿ è¦ãªä¸æãã¡ã¤ã«ãåé¤ãã¾ãã
Path.GetTempFileName Method (System.IO) | Microsoft Docs
ãã®ãããã®ä¸ä¾¿ã(åºåå
ãæ¡å¼µåãé¸ã¹ãªã)ã¯ãstaticãªã¡ã½ãããå¼ã³åºãã ãã§ä½¿ããã¨ããæ°è»½ãã¨ãã¬ã¼ããªãããçµæã ã¨æãã®ã§ããã¯ãããããªãã®ããªã¨ãä¸ä¾¿ã¨ã¯ããããã¨ãã°åºåããå¾ã«ååãå¤ãã¦ç§»åããã°è§£æ±ºã§ããç¨åº¦ã®åé¡ã§ãã®ã¯ãªãã£ã«ã«ãªåé¡ç¹ã§ã¯ããã¾ããã
ãã ãããããä¸ä¾¿ãã¯è¨±ãã䏿¹ã§ã使ãããã«ã¯æ±ºã¾ããã¨ãããã¤ãçãã¦ãã¾ããã¨ãã¨ã©ã¼ãã³ããªã³ã°ãå¿ è¦ãªãã¨ãããã¦ããã¡ã¤ã«åãæ¬²ããã ããªã®ã«å¾å§æ«ã¾ã§ç´æããããããã¨ããã®ã¯å人çã«ã¯ããã ããªããªã¼ã¨æãã¾ãã
ãã¾ã®ã¨ãããããã©ããããã使ãããã¨ããçµè«ã«...ã
2. ãã¼ã¿ã®ã¦ãã¼ã¯ãã¼ãæµç¨ãã
使ãããã¡ã¤ã«ã«æ ¼ç´ããããã¼ã¿ã®ãã¼æ å ±(å人ãååã®IDãªã©)ãããå ´åã«ã¯ãããããã¡ã¤ã«åã«å ¥ãããã¨ã§ã¦ãã¼ã¯ãªãã¡ã¤ã«åã使ã§ãã¾ãã
(ã¡ãªãã)
-
- ãã¼ã¿ã®ä¸ã¨ãã¡ã¤ã«åãçµã³ã¤ãã¦ããã®ã§åããããã
(ãã¡ãªãã)
-
- ãã¡ã¤ã«ã®ä¸ã«ãã¼æ å ±ãç¡ãã¨ãããã使ããªã
- åä¸ãã¼ã«å¯¾ãã¦è¤æ°ã®ãã¡ã¤ã«ãå¿ è¦ã«ãªã£ãå ´åãªã©ãããåä½ã§ã¯ä½¿ããªãã±ã¼ã¹ããã
ã¢ã¤ãã£ã¢ã¨ãã¦ã¯æªããªãã®ã§ãããåºæ¬çã«ããã ãã§ã¯ã¦ãã¼ã¯ãªãã¡ã¤ã«åã¯çæã§ãã¾ããã
ããã¯ä»ã®ã»ã¨ãã©ã®ã¢ã¤ãã£ã¢ãåããªãã§ãã...ã
3. é£çªãå©ç¨ãã
ãã¡ã¤ã«åã«å¦çãããé çªã«é£çªãæ¯ãã¨ããæ¹æ³ã§ãã
ãã¿ã¨ããã°ãã¿ãªãã§ããããã³ããªã³ã°ããããã§ããã¨ã¦ã確å®ãªæ¹æ³ã§ãã
ããã«å¦çããé çªããããã®ã§å人çã«ã¯ããã好ããªæ¹æ³ã§ãã
int cnt = 1; string before = DateTime.Now.ToString("yyyyMMdd"); foraech (xxxxxxx){ // ããã®ã«ã¼ãæ¡ä»¶ã¯é©å½ã« string now = DateTime.Now.ToString("yyyyMMdd"); if (before != now) cnt = 1; string.Format("A_{0}_{1:000}.xml", DateTime.Now.ToString("yyyyMMdd"), cnt++); before = now; }
ããã§ã¯æ¥ä»ãã¨ã«é£çªãæ¯ã£ã¦ãã¾ããããã®ãããã¯å¥½ã好ãã§ã
(ã¡ãªãã)
-
- ãã¡ã¤ã«ã使ããé çªãããã
(ãã¡ãªãã)
-
- é£çªã ãã§ã¯ã¦ãã¼ã¯ã§ãããã¨ãä¿è¨¼ã§ããªã
ä¸ã®ä¾ã ã¨æ¥ä»ã¨çµã¿åããã¦ä½¿ã£ã¦ãã¾ããããããªæãã§é£çªãæ¯ãã«ãã¦ãä»ã®æ¹æ³ã¨ã®ä½µç¨ãæã¾ããã§ãã
4. ä¹±æ°/ããã·ã¥ãå©ç¨ãã
ããã¾ã§å¼ã£å¼µã£ã¦ãã¾ãã¾ããããããã°ã©ãã¼ã䏿ãªãã¼ã¿ãå¾ããã¨æåã«æãã¤ãã®ã¯ããããä¹±æ°orããã·ã¥ã ã¨æãã¾ãã好ã¿ã¯ããã§ããããã©ã
ä¹±æ°ã ã¨ãããªæãã
foraech (xxxxxxx){ // ããã®ã«ã¼ãæ¡ä»¶ã¯é©å½ã«
string.Format("A_{0:0000000000}.xml", new Random().Next());
}
ããã·ã¥ã¯ãããµã³ãã«ãæãã¤ããªãã®ã§ãåèãµã¤ããç´¹ä»ããã«ã¨ã©ãã¦ããã¾ãããã¡ã¤ã«ãããã»ã©å¤§ãããªããã°ããã¡ã¤ã«ã®ä¸èº«å
¨é¨ã§ããã·ã¥å¤ãçæããã®ãããã®ããªã¨ã
(åè)ãMD5やSHA1などでハッシュ値を計算する
(ã¡ãªãã)
-
- æ±ããç°¡åãªå²ã«å¹æã¯å¤§ãã
(ãã¡ãªãã)
-
- ãããã䏿ã§ãããã¨ãå®å ¨ã«ä¿è¨¼ããä»çµã¿ã§ã¯ãªã
- ååãããã¡ã¤ã«ã®ä¸èº«ã夿ããã®ãé£ãã
確ççã«ã¯è¢«ãå¯è½æ§ã¯ã»ã¼ã¼ããªãã§ãããã¼ãã§ã¯ãªãã ãã§å¯è½æ§ã¨ãã¦ã¯ãããã¾ãã
ãªã®ã§ä»çµã¿ã¨ãã¦ããããä¸å®å
¨ãªã®ã¨ããã¨ã¯ãã¡ã¤ã«åãç¡ä½çºéãã¦ãã¡ã¤ã«ã®ä¸ã¨çµã³ã¤ããªãã®ã¯å人çã«ã¯ãã¾ã好ãã§ã¯ãªãã§ãããªã®ã§ç§èªèº«ã¯ãã¾ã使ãããæ¹æ³ã§ã¯ããã¾ããã
5. PIDãå©ç¨ãã
ããã»ã¹ãã¨ã«æ¯ãããIDã使ãã°ã¦ãã¼ã¯ã«ãªãããããï¼ã¨ããå®ç´ãªæ¹æ³ã§ãã
int cnt = 1; int pid = Process.GetCurrentProcess().Id; foraech (xxxxxxx){ // ããã®ã«ã¼ãæ¡ä»¶ã¯é©å½ã« string.Format("A_{0}_{1:000}.xml", pid , cnt++); }
(ã¡ãªãã)
-
- å¼ã³åºãã ãã§ç°¡å
(ãã¡ãªãã)
-
- 常é§åããã»ã¹ã ã¨IDã¯å¤ãããªã
ã¨ãããããµã¼ãã¹ã¨ãã¦åããã¦ããå ´åãªã©ã¯ããã»ã¹IDã¯å¸¸ã«å¤ãããªãã®ã§ããã ãã¯ãã¼æ
å ±ã«ãªãã¾ãããæ¥ä»ãé£çªã¨çµã¿åããã¦ä½¿ãã®ãããã®ããªã¨ãã¨ããããããã ã£ããå¥ã«ããã»ã¹IDã¯ãããªãã...ã
GUIDãå©ç¨ãã
GUID(Global Unique IDentifier)ãæ¥æ¬èªã ã¨ã°ãã¼ãã«ä¸æèå¥åã¨ããããã§ãããWikipediaã«ããã¨UUID(Universally Unique IDentifier)ã®MSçå®è£
ãæãããã§ãããã ãMSçã¨è¨ãã¤ã¤ãå¤ãã®ãµã¼ãã¹ãã½ããã¦ã§ã¢ã§ä½¿ããã¦ããããã«æ¦ãä¸è¬çãªè¨èã¨ã¨ããã¦ãããããã§ãã
MSDNãèªãã§æ°ä»ããã®ã§ãããããã¯ã©ã¹ãããªãæ§é ä½ãªãã§ããããã C#ã®å ´åã¯æ§é ä½ãã¡ã½ããããã¦ãã®ã§ãå¤åãåç
§åãã¨ãé
ç½®ãããå ´æããã¼ããã¹ã¿ãã¯ããããããéãã¯ãªãã¦æ±ãã¯å¤ãããªãã®ã§
GUID ã¯ã䏿ãªèå¥åãå¿ è¦ã¨ãããã³ã³ãã¥ã¼ã¿ããã³ãããã¯ã¼ã¯å ¨ä½ã§ä½¿ç¨ã§ãã 128 ãããã®æ´æ° (16 ãã¤ã) ã§ãããã®ãããªèå¥åã¯ãéè¤ãã確çãããªãä½ããªã£ã¦ãã¾ãã
Guid Struct (System) | Microsoft Docs
ãããä½¿ãæ¹ã¯ç°¡åã§ãNewGuidã¡ã½ããã§åæåãã¦ããToString()ããã ãã§ãã
Guid guidValue = Guid.NewGuid();
Console.WriteLine(guidValue.ToString()); // -ãä»ãã¦ã
Console.WriteLine(guidValue.ToString("N")); // -ãä»ãã¦ãªã
Console.WriteLine(guidValue.ToString("B")); // -ãä»ãã¦ãã¦ã{}ã§å²ã¾ãã¦ãã
Console.WriteLine(guidValue.ToString("P")); // -ãä»ãã¦ãã¦ã()ã§å²ã¾ãã¦ããã§ãçµæã¯ãããªæãã§ãã
æ°ããGUIDãæ¬²ããå ´åã¯å度NewGuidã¡ã½ãããå¼ã¹ã°OKã§ãã
(åè)ãGUID値を生成するには?
(ã¡ãªãã)
-
- å¼ã³åºãã ãã§ã»ã¼ä¸æãªæååãåãã¦ä¾¿å©
(ãã¡ãªãã)
-
- ä»»æéãã¦ååã«è¦åæ§ããªãæ±ãã«ããã±ã¼ã¹ããã
- 確å®ã«ãã¡ã¤ã«åããã¶ããªãããã§ã¯ãªã
ããªã便å©ã§ãããååã被ã確çãã»ã¼ãªãã®ã§æªããªãã®ã§ããããããä¹±æ°ãªã©ã¨åãã§è¦åæ§ãç¡ãããã¦ãã¡ã¤ã«åã¨ãã¦ã¯ã¨ã¦ãæ±ãã«ããã§ãã
ãã¨ãããããã¾ã§ç´¹ä»ããã¨ãããããã ãã§å®å
¨ã«éè¤ãé²ãæ¹æ³ã§ã¯ãªãã®ã§ãä»ã®æ¹æ³ã¨åããåä½ã§ä½¿ãã®ã§ã¯ãªãè¦ç´ ã¨ãã¦ä½¿ãã¹ãããªã¨ã
6. çµè«
çµå±ãä»åç§ãé¸ãã ã®ã¯ãæ¥ä»(yyyyMMdd)ãï¼ãã¦ãã¼ã¯ãªæ
å ±ãä»ä¸ãï¼ãé£çªãã¨ããçµã¿åããã§ããã
public string GetUniqueFileName(string id, ref int num){ while (true){ string fileName = string.Format("XMLãã¡ã¤ã«_{0}_{1}_{2:00000}.xml", DateTime.Now.ToString("yyyyMMdd"), id, num++); if (File.Exists(fileName)) { if (num > 99999) throw new IOException("é£çªã§ãéãã¯ãã¿"); continue; } return fileName; } }
é£çªã5æ¡(99999ã¾ã§)ã«ãã¦ããã®ã¯ãç¾å®çã«ä½æãããä¸éã¨ãã¡ã¤ã«åãæ¥µåçããããã¨ããã¨ããã§æãåããã¤ãã¦æ±ºããã ãã§ããã¯ã±ã¼ã¹ãã¤ã±ã¼ã¹ã§å¤ãã¦ããã§ãã
ãã¨ã½ã¼ã¹ã«ãããã¨ãããæ¢ã«ãã®ååã®ãã¡ã¤ã«ããã£ãå ´åã«ã¯ãé£çªããã¤ã³ã¯ãªã¡ã³ããã¦å度ååãå¤ããã¨ãã対å¿ãåããã¦è¡ã£ãã®ã§ãããã§ãã¡ã¤ã«è¢«ããã¨ã¯ãªãããã§ããæ¬å½ã¯æãçªããã£ãå ´åã«ã対å¿ããããã¨æã£ãã®ã§ãããç¾å®çã«ããã¾ã§ãã¡ã¤ã«ã¯å¢ããªãã®ã§ããã§ã¯å²æãã¾ããã
ã¡ãªã¿ã«ãä»åã¯ã·ã³ã°ã«ã¹ã¬ããåæã®å¦çãªã®ã§ãã®ç¨åº¦ã§ãååã§ããããã«ãã¹ã¬ãããªç°å¢ã ã¨ããã¡ãã£ã¨å·¥å¤«ãæ°é
ããå¿
è¦ããã§ãã
# é¢åãªã®ã§ä»åã¯ããã¾ã§ã¯èª¬æãã¾ããï¼è©³ãããªããï¼
ãã£ã¨è¯ãæ¹æ³ããããï¼ã¨ãã人ã¯ã³ã¡ã³ãã§æãã¦ãã ããã¼ã
